Trying to understand function types eg iterate (a -> a)

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
3 messages Options
Reply | Threaded
Open this post in threaded view
|

Trying to understand function types eg iterate (a -> a)

acomber
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.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.haskell.org/pipermail/beginners/attachments/20131231/2633a939/attachment.html>

Reply | Threaded
Open this post in threaded view
|

Trying to understand function types eg iterate (a -> a)

Peter Hall
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>

Reply | Threaded
Open this post in threaded view
|

Trying to understand function types eg iterate (a -> a)

divyanshu ranjan
In reply to this post by acomber
Hi Angus,

   Your understanding is correct. Parenthesis is need in a -> a to specify
that it is function from a to a because associativity of -> is from right
to left. (*2) is section, you can read more
   about here :
http://www.haskell.org/haskellwiki/Section_of_an_infix_operator.

   Type of (*2) is (Num a) :: a -> a rather than particular type Int.


Thanks
Divyanshu Ranjan





On Tue, Dec 31, 2013 at 8:16 PM, 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/9807d666/attachment.html>