Memoization in Haskell?

We can do this very efficiently by making a structure that we can index in sub-linear time. But first, {-# LANGUAGE BangPatterns #-} import Data.Function (fix) Let’s define f, but make it use ‘open recursion’ rather than call itself directly. f :: (Int -> Int) -> Int -> Int f mf 0 = 0 f … Read more

Is there any haskell function to concatenate list with separator?

Yes, there is: Prelude> import Data.List Prelude Data.List> intercalate ” ” [“is”,”there”,”such”,”a”,”function”,”?”] “is there such a function ?” intersperse is a bit more general: Prelude> import Data.List Prelude Data.List> concat (intersperse ” ” [“is”,”there”,”such”,”a”,”function”,”?”]) “is there such a function ?” Also, for the specific case where you want to join with a space character, there … Read more

Why is GHC so large/big?

It’s a bit silly really. Every library that comes with GHC is provided in no less than 4 flavours: static dynamic profiled GHCi The GHCi version is just the static version linked together in a single .o file. The other three versions all have their own set of interface files (.hi files) too. The profiled … Read more

Specialization with Constraints

GHC also gives an option to SPECIALIZE a type-class instance declaration. I tried this with the (expanded) code of Foo.hs, by putting the following: instance (Num r, V.Vector v r, Factored m r) => Num (VT v m r) where {-# SPECIALIZE instance ( Factored m Int => Num (VT U.Vector m Int)) #-} VT … Read more