[Haskell-cafe] Definition of List type?
Daniel Fischer
daniel.is.fischer at web.de
Fri Jul 30 16:23:04 EDT 2010
On Friday 30 July 2010 21:54:20, michael rice wrote:
> Thanks all,
>
> Now that I have a (very) rudimentary understanding of Haskell, I figured
> I'd back up and have a closer (conceptual) look at type definitions to
> see what they have in common, and just happen to pick Maybe and List.
>
> I also noticed Maybe has a list of "Instances"
>
> Monad Maybe
> Functor Maybe
> Typeable1 Maybe
> MonadFix Maybe
> MonadPlus Maybe
> etc.
>
> while List has none, at least I don't see any in Data.List. Same reason?
Data.List provides only functions for working with lists, while Data.Maybe
also contains the definition of the type.
Type class instances are documented
- at the type class
- at the data type
Since the list datatype isn't documented like the other types (probably
because it's not defined in valid Haskell but built-in), the list instances
appear only at the type classes (and at the Monad documentation, you find
"Monad []" listed as the first instance.
>
> >From "Learn You A Haskell:"
>
> "If a type is a part of a typeclass, that means it supports and
> implements the behavior the typeclass describes."
>
> I'm way out on a limb here, but isn't Monad a typeclass?
Yes.
> and if, as we
> say above, that Maybe is an instance of Monad, wouldn't there have to be
>
> instance Monad Maybe where
> return = ... -- return for Maybe
> >>= = ... -- bind for Maybe
> etc.
>
> somewhere?
Yes, there is. In GHC at least, it's defined in Data.Maybe:
instance Monad Maybe where
(Just x) >>= k = k x
Nothing >>= _ = Nothing
(Just _) >> k = k
Nothing >> _ = Nothing
return = Just
fail _ = Nothing
> Where? It's not in Data.Maybe. Is there some kind of scheme
> for defining this stuff, i.e., this goes here, that goes there?
Instance declarations should be in the same module where
- the class is defined, or
- the type is defined
if possible.
More information about the Haskell-Cafe
mailing list