<table cellspacing="0" cellpadding="0" border="0" ><tr><td valign="top" style="font: inherit;">Hi Daniel,<br><br>OK, now I'm getting somewhere. I was looking here:<br><br>http://haskell.org/ghc/docs/6.12.1/html/libraries/base-4.2.0.0/Data-Maybe.html<br><br>instead of in the source.<br><br>Seem to be on the right track. I'm going to do some more poking around.<br><br>Thanks a lot, guys.<br><br>Michael<br><br><br>--- On <b>Fri, 7/30/10, Daniel Fischer <i>&lt;daniel.is.fischer@web.de&gt;</i></b> wrote:<br><blockquote style="border-left: 2px solid rgb(16, 16, 255); margin-left: 5px; padding-left: 5px;"><br>From: Daniel Fischer &lt;daniel.is.fischer@web.de&gt;<br>Subject: Re: [Haskell-cafe] Definition of List type?<br>To: haskell-cafe@haskell.org<br>Cc: "michael rice" &lt;nowgate@yahoo.com&gt;<br>Date: Friday, July 30, 2010, 4:23 PM<br><br><div class="plainMail">On Friday 30 July 2010 21:54:20, michael rice wrote:<br>&gt; Thanks all,<br>&gt;<br>&gt; Now that
 I have a (very) rudimentary understanding of Haskell, I figured<br>&gt; I'd back up and have a closer (conceptual) look at type definitions to<br>&gt; see what they have in common, and just happen to pick Maybe and List.<br>&gt;<br>&gt; I also noticed Maybe has a list of "Instances"<br>&gt;<br>&gt; Monad Maybe<br>&gt; Functor Maybe<br>&gt; Typeable1 Maybe<br>&gt; MonadFix Maybe<br>&gt; MonadPlus Maybe<br>&gt; etc.<br>&gt;<br>&gt; while List has none, at least I don't see any in Data.List. Same reason?<br><br>Data.List provides only functions for working with lists, while Data.Maybe <br>also contains the definition of the type.<br><br>Type class instances are documented<br>- at the type class<br>- at the data type<br><br>Since the list datatype isn't documented like the other types (probably <br>because it's not defined in valid Haskell but built-in), the list instances <br>appear only at the type classes (and at the Monad documentation, you find
 <br>"Monad []" listed as the first instance.<br><br>&gt;<br>&gt; &gt;From "Learn You A Haskell:"<br>&gt;<br>&gt; "If a type is a part of a typeclass, that means it supports and<br>&gt; implements the behavior the typeclass describes."<br>&gt;<br>&gt; I'm way out on a limb here, but isn't Monad a typeclass?<br><br>Yes.<br><br>&gt; and if, as we<br>&gt; say above, that Maybe is an instance of Monad, wouldn't there have to be<br>&gt;<br>&gt; instance Monad Maybe where<br>&gt; &nbsp;return = ...&nbsp; -- return for Maybe<br>&gt; &nbsp;&gt;&gt;= = ...&nbsp;&nbsp;&nbsp;&nbsp; -- bind for Maybe<br>&gt; &nbsp;etc.<br>&gt;<br>&gt; somewhere?<br><br>Yes, there is. In GHC at least, it's defined in Data.Maybe:<br><br>instance&nbsp; Monad Maybe&nbsp; where<br>&nbsp; &nbsp; (Just x) &gt;&gt;= k&nbsp; &nbsp; &nbsp; = k x<br>&nbsp; &nbsp; Nothing&nbsp; &gt;&gt;= _&nbsp; &nbsp; &nbsp; = Nothing<br><br>&nbsp; &nbsp; (Just _) &gt;&gt;&nbsp; k&nbsp; &nbsp; &nbsp; =
 k<br>&nbsp; &nbsp; Nothing&nbsp; &gt;&gt;&nbsp; _&nbsp; &nbsp; &nbsp; = Nothing<br><br>&nbsp; &nbsp; return&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; = Just<br>&nbsp; &nbsp; fail _&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; = Nothing<br><br><br><br>&gt; Where? It's not in Data.Maybe. Is there some kind of scheme<br>&gt; for defining this stuff, i.e., this goes here, that goes there?<br><br>Instance declarations should be in the same module where<br>- the class is defined, or<br>- the type is defined<br>if possible.<br><br></div></blockquote></td></tr></table><br>