[Haskell-beginners] type class question from MReader #8
MH
mhamro at gmail.com
Mon Jul 13 23:43:40 EDT 2009
I am reading the article from Monad Reader issue #8 called Type-Level
Instant Insanity
by Conrad Parker and I don't understand the part on recursive types.
data Nil
data Cons x xs
data x ::: xs
infixr 5 :::
class ListConcat a1 a2 a | a1 a2 -> a where
listConcat :: a1 -> a2 -> a
instance ListConcat Nil a a where listConcat = _|_
instance (ListConcat xs ys zs)
=> ListConcat (x ::: xs) ys (x ::: zs) where listConcat = _|_
1. How does the last function becomes recursive?
2. Why do we need constraint '(ListConcat xs ys zs) =>' ?
3. I assume that listConcat function takes three arguments but from
example provided, it takes two (see below):
4. Does the functional dependency sign (->) implies that the last
argument is the return type?
Main> :type listConcat (u:: R ::: G ::: B ::: Nil) (u:: W ::: Nil)
listConcat (u::R:::G:::B:::Nil) (u::W:::Nil)::(:::) R
((:::) G ((:::) B ((:::) W Nil)))
Thanks a lot.
Malik
More information about the Beginners
mailing list