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)?