[Haskell-beginners] Trying to understand function types eg iterate (a -> a)

Peter Hall peter.hall at memorphic.com
Tue Dec 31 14:53:44 UTC 2013


When you wrap an operator in parentheses and supply just one of its
arguments, then it's called an operator section. It's syntactic sugar for
partially applying the operator, as you can with other functions.

This:
    (*2)

is exactly equivalent to:
    (\x -> x*2)

and it's type is something like:
    Int -> Int

And:
    (2:)

is equivalent to:
    (\x -> 2:x)

etc



On 31 December 2013 14:46, Angus Comber <anguscomber at gmail.com> wrote:

> iterate' :: (a -> a) -> a -> [a]
>
> I am trying going to go ahead and write my own iterate function.  But
> before I do I want to be clear on types.
>
> Looking at  :: (a -> a) -> a -> [a]
>
> The first part is (a -> a)  Now because it is in parentheses it is a
> function?
>
> I can call iterate like this:
> take 5 $ iterate (*2) 5
>
> So (*2) is a possible function.  Does the brackets mean it is a function,
> the left hand a is indicating a general type and the right hand a means the
> return type must be the same as the function type.  Eg in the case of (*2)
> the 2 is an Int so the function returns and Int?  Is my understanding
> correct?
>
> How could this be better explained?
>
> The last bit is easier to understand.  a -> [a] meaning a singleton of
> general type and [a] means a list of same type.
>
>
>
>
>
>
> _______________________________________________
> 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/20131231/33545c3e/attachment.html>


More information about the Beginners mailing list