[Haskell-beginners] function not working as expected, type issues (Gesh)

Alexej Magura sickhadas at gmail.com
Thu Apr 10 04:00:40 UTC 2014

>an arg.  My initial guess is that the *first* type specified is the one 
>returned, but I’m not sure. 
I'm curious as to why you thought that. The directionality of the arrows in a type signature is quite clear, at least to me. a -> b is the type of functions *from* a *to* b. 
Well, most of the languages that I’ve used are dynamically typed, but the one language that I’m _kinda_ familiar with that _is_ statically typed is C: several of the Haskell tutorials that I’ve been reading describe that:

	A :: Int

means that *A* is _of_ type *Int*, which kind of sounds like A returns type Int

functions such as map :: (a -> b) -> [a] -> [b] (can you guess what it does and how it does it? Can you do that just by looking at the type?). 
Map appears to take a lambda function, which takes type *a* returning type *b* (both of which are purely arbitrary), a list of type *a*, and returns a list of type *b*, applying the lambda function to each element in the list of type *a*.

From your coding style, it appears that you think of && in the way Bash does - as the function: 

> p && x = if p then x else *nothing* 

Something like that.

Anyway, all of the above means that passing a non-Bool value to && is not acceptable, and since hPutStr stdout string is not a value of type Bool, GHC complains. 
Makes sense.

Alexej Magura
Sent with Airmail

More information about the Beginners mailing list