
Hi Job,
Thanks for answering. What I'm trying to do is probably very simple,
and I think the biggest problem is that I don't fully understand kinds
yet.
Here's an example instance:
instance Chunkable [a] a where
cmap = map
--etc.
In the class I wrote, c has kind * (e.g. [a]), but then I don't see
how to write a suitable map function. For that, I would want c to
have kind * -> *. Unfortunately then I don't know to write the
others.
Would I have to do something with c having kind (* -> *) ?
class Chunkable2 c el where
cLength :: c el -> Int
cHead :: c el -> Maybe el
cMap :: (el -> el') -> c el -> c el'
Sincerely,
John
On Wed, Feb 11, 2009 at 5:12 PM, Job Vranish
What do you mean by parameterized over a different type? will c have a kind of * -> * ? I don't think it has to be for what you want to work, but the idea of "same instance" will go out the window.
Do you have a small usage example?
On Wed, Feb 11, 2009 at 11:52 AM, John Lato
wrote: Hello,
I'm working on some code like the following:
class Chunkable c el | c -> el where cLength :: c -> Int cHead :: c -> Maybe el
I want to be able to map over this type, like this:
cMap :: Chunkable c' el' => (el -> el') -> c -> c'
but this isn't quite right. c' shouldn't be any instance of Chunkable, it should be the same instance except parameterized over a different type. Another approach would be something like:
class (Functor c) => Chunkable c el ...
except that's not right either. I think c has the wrong kind to be a Functor instance.
I expect there's something very basic I'm missing. Could anyone point in the proper direction of how to do this? Can this be expressed with associated types, perhaps?
Thanks,
John Lato _______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe