These questions have insightful answers about some deep detail of Haskell.
Why do we have »let« syntax when we also have lambdas? What’s the difference between these two expressions?
(\x -> <expr>) y
let x = y in <expr>
What is the difference between these two types?
data Data a = Data !a
newtype Newtype a = Newtype a
(Note: Bangs in data definitions are standard Haskell.)
foldl' (+) (0 :: Int) [1..100000]
– in what way can a sufficiently stupid
compiler overflow here?
Does foldr (+) (0 :: Int)
overflow the heap or the stack? What about
foldl (+) (0 :: Int)
?