[Haskell-beginners] map increases length of list

Michael Snoyman michael at snoyman.com
Wed Jun 17 18:02:59 EDT 2009


Aaron,

Look at the following snippet:

> length ([0,60..359] :: [Double])
7

Basically, the Enum instance for Double is done differently than for Int (I
don't remember why exactly). If you take off the type signature, it uses Int
by default. When you use map, it implicitly converts that to a Double.

Hope that helps.

Michael

On Thu, Jun 18, 2009 at 12:35 AM, Aaron MacDonald <aaronjm at eastlink.ca>wrote:

> For some reason, the map function returns a list that has one more element
> than my input list.
>
> My input list is a range defined by [0, 60..359] (should translate into
> [0,60,120,180,240,300]).
>
> The function I'm giving to map is defined this way:
> -----
> degreesToRadians :: Double -> Double
> degreesToRadians degrees = degrees * (pi / 180)
> -----
>
> This is how I'm calling map overall:
> -----
> > map degreesToRadians [0,60..359]
>
> [0.0,1.0471975511965976,2.0943951023931953,3.141592653589793,4.1887902047863905,5.235987755982989,6.283185307179586]
> -----
>
> As you can hopefully see, there are seven elements instead of six. Getting
> the length confirms this:
> -----
> > length [0,60..359]
> 6
> > length $ map degreesToRadians [0,60..359]
> 7
> -----
>
> I do not seem to get this behaviour with the length if I either substitute
> the degreesToRadians function or substitute the [0,60..359] range.
>
> P.S. Is there a built-in function to convert degrees to radians and
> vice-versa?
> _______________________________________________
> 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/20090617/cc915786/attachment.html


More information about the Beginners mailing list