Why is Stack not Cabal?
fpcomplete.com
fpcomplete.com
FPComplete is really doing amazing work for the community, especially with not just going around fixing their own problems but actually putting out questionaries to identify what the community as a whole sees as the problem.
I can't wait to see where the community goes in the next couple of years!
I didn't know about Stack before reading this, but it sounds very good. Cabal-install has always given me problems.
I definitely recommend at least trying it out, and will do so myself.
cabal init
stack init
stack build
Then I wanted a newer version of persistent, so I opened up my stack.yaml file and added persistent 2.2 to the extra-deps section:extra-deps: - persistent-2.2
Then I was wondering how to make emacs haskell-mode work with it, and I saw this[0] in the stack repo:
((haskell-mode . ((haskell-indent-spaces . 4)
(hindent-style . "johan-tibell")
(haskell-process-type . ghci)
(haskell-process-path-ghci . "stack")
(haskell-process-args-ghci . ("ghci")))))
Now everything is working flawlessly and very fast. As a bonus Haskell-mode works correctly for projects I haven't moved to/tested with stack yet.0: https://github.com/commercialhaskell/stack/blob/master/.dir-...
In case anyone is wondering how to turn on language pragmas with stack ghci in emacs, I did this for the project I'm working on, because I need OverloadedStrings turned on:
((haskell-mode . ((haskell-indent-spaces . 4) (hindent-style . "johan-tibell") (haskell-process-type . ghci) (haskell-process-path-ghci . "stack") (haskell-process-args-ghci . ("ghci" "--ghc-options" "-XOverloadedStrings")))))
I'm wondering, is there any plan to support installation of pre-compiled binaries with Stack? (Compiling Haskell libraries with all their dependencies can be quite slow.) Or is it what Nix is for? If so, can I use Nix along with the regular package management of my Linux distribution?
Rust's lifetimes are a bit annoying, its async IO story is woeful, but it does allow safe mutation.
Haskell's more mature, IO is great, and it looks like cabal-hell may be ending, but it is a garbage-collected language.
(That being said, I think 'woeful' is a pretty strong word to describe the situation. Sure, Haskell is nicer in that regard, but most other languages aren't.)
Speaking of the garbage collector, it was the biggest productivity boost that software developers ever experienced and no matter how many tricks the Rust compiler pulls, the hit on productivity is real. And in terms of the "if it compiles, it runs" feeling, that comes with having an advanced type system. Rust pulls some really nice tricks, but cannot match Haskell. And again, the lack of a GC means the compiler's budget is spent on ensuring that the code is memory-safe, with other things having much lower priority.
I'm not convinced that's true. Rust is even stricter than Haskell in many respects (first example that comes to mind is incomplete pattern matches, which is a compiler error in rust) and strictness also avoids some run-time errors. I've managed to produce infinite loops in Haskell by accidentally defining recursive values more than once.
--hello.hs
f mx = case mx of
Just x -> x
--Nothing -> "NA"
main = do
let v = Just "5"
putStrLn $ f v
ghc -W hello.hs
[1 of 1] Compiling Main ( hello.hs, hello.o )
hello.hs:1:8: Warning:
Pattern match(es) are non-exhaustive
In a case alternative: Patterns not matched: Nothing