[Haskell-cafe] ANN: fixed-list -- A fixed length list library
Casey McCann
syntaxglitch at gmail.com
Sun Mar 21 02:37:26 EDT 2010
Job Vranish <job.vranish at gmail.com> wrote:
> Its main advantages are:
> Very easy to use.
> Almost entirely Haskell98 (the non Haskell98 pieces are not critical, just
> nice)
> The datatype is a member of Foldable, Traverable, Applicative, Monad,
> etc...
> Then length of the list is encoded in the type in a natural way.
Unfortunately, it's very easy to get a context reduction stack
overflow from GHC this way, which makes using such datatypes awkward
for anything but very short lists. Explicit type annotations will
often make things work, but at that point the type class isn't helping
you anyway. For example, assuming the default stack size:
import Data.FixedList
fixed18 :: FixedList18 Int
fixed18 = fromFoldable' [1..] -- this works
fixed20 = 20 :. 20 :. fixed18 -- this works
fixed22 :: FixedList22 Int
fixed22 = 22 :. 22 :. fixed20 -- this only works with a type annotation
show18 = show fixed18 -- this works
-- this doesn't work:
-- show20 = show fixed20
show20' :: FixedList20 Int -> String
show20' list20 = show list20
show20 = show20' fixed20 -- this does work
Using head and tail on longer lists fails likewise. I expect there's
some way to make it work without simply increasing the stack depth,
but I'm not sure how. Any thoughts?
- C.
More information about the Haskell-Cafe
mailing list