[Haskell-beginners] Maybe a and Maybe t

Andrew Wagner wagner.andrew at gmail.com
Sat May 30 16:50:39 EDT 2009


Good question, but I'm afraid the answer will be a bit disappointing. The
real answer is, it doesn't matter - the following types are all the same:
a -> a
b -> b
t -> t
supercalifragilisticexpialodocious -> supercalifragilisticexpialodocious

As for why it actually happens in this case, it's no doubt related to the
particular algorithm ghci uses to do the type inference.

On Sat, May 30, 2009 at 4:37 PM, Ivan Uemlianin <ivan at llaisdy.com> wrote:

> Dear All
>
> I have just started learning Haskell, using the O'Reilly book Real World
> Haskell [1].  I'm finding it a very exciting language, and I'm working my
> way painstakingly through the book (I'm up to the exercises at the end of
> Chapter 3).
>
> I have a query based on some code from the book.  This question has been
> asked on the book web site [2], but no answer.  I have also Googled about
> and scanned the documentation.
>
> So, here is some code (quoted from [3]): two implementations of a function
> to return the second element of a list.  I have commented out the type
> signatures.
>
> -- file: rwh_examples2/ch03/MySecond.hs
>
> -- safeSecond :: [a] -> Maybe a
>
> safeSecond [] = Nothing
> safeSecond xs = if null (tail xs)
>               then Nothing
>               else Just (head (tail xs))
>
> -- tidySecond :: [a] -> Maybe a
>
> tidySecond (_:x:_) = Just x
> tidySecond _       = Nothing
>
> My query concerns the inferred types of these functions --- the types
> inferred when the type signatures are commented out.  Here's a ghci session:
>
> Prelude> :load seconds.hs
> [1 of 1] Compiling Main             ( seconds.hs, interpreted )
> Ok, modules loaded: Main.
> *Main>
> *Main> :type safeSecond
> safeSecond :: [a] -> Maybe a
> *Main>
> *Main> :type tidySecond
> tidySecond :: [t] -> Maybe t
> *Main>
>
> Why is safeSecond type [a] -> Maybe a, and tidySecond type [t] -> Maybe t?
>  I mean why does one use "a" and the other "t"?  What does it mean?
> If I change the order of the two functions in the source file, safeSecond
> still uses "a" and tidySecond still uses "t".
>
> Can anyone help, or point me to the right place in the documentation?  In
> the meantime, if I find out from elsewhere I'll report back here.
>
> Thanks and best wishes
>
> Ivan
>
> [1]  http://book.realworldhaskell.org/
> [2]
> http://book.realworldhaskell.org/read/defining-types-streamlining-functions.html#comment8512
> [3]
> http://book.realworldhaskell.org/read/defining-types-streamlining-functions.html#deftypes.morecontrolled
>
>
> --
> ============================================================
> Ivan A. Uemlianin
> Speech Technology Research and Development
>
>                   ivan at llaisdy.com
>                    www.llaisdy.com
>                        llaisdy.wordpress.com
>                    www.linkedin.com/in/ivanuemlianin
>
>   "Froh, froh! Wie seine Sonnen, seine Sonnen fliegen"
>                    (Schiller, Beethoven)
> ============================================================
>
> _______________________________________________
> Beginners mailing list
> Beginners at haskell.org
> http://www.haskell.org/mailman/listinfo/beginners
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://www.haskell.org/pipermail/beginners/attachments/20090530/11c69ba9/attachment.html


More information about the Beginners mailing list