Roelof Wobben r.wobben at home.nl
Sat Oct 31 13:08:34 UTC 2015

```Op 31-10-2015 om 13:44 schreef Darren Grant:
> You're very close. Take a look at the even clause: Let (k :: Integer),
> and consider how the type of the expression producing the error,
>
>   Just (f2Maybe k)
>
> differs from the type of the expression,
>
>   (f2Maybe k)
>
> Cheers,
> Darren
>

Just (f2Maybe k) is type Maybe (Maybe Integer)
f2Maybe k is type Maybe Integer

But when I change the code to this :

f2Maybe :: Integer -> Maybe Integer
f2Maybe n
| n > 0  = Nothing
| n == 0  = Just 1
| even n = f2Maybe ( n `div` 2) ^ 2
| odd n  = (f2Maybe ( n `div` 2) ^ 2) * 2

Then I see this error message :

No instance for (Num (Maybe Integer)) arising from a use of ‘^’
In the expression: f2Maybe (n `div` 2) ^ 2
In an equation for ‘f2Maybe’:
f2Maybe n
| n > 0 = Nothing
| n == 0 = Just 1
| even n = f2Maybe (n `div` 2) ^ 2
| odd n = (f2Maybe (n `div` 2) ^ 2) * 2

No instance for (Num (Maybe Integer)) arising from a use of ‘^’
In the expression: f2Maybe (n `div` 2) ^ 2
In an equation for ‘f2Maybe’:
f2Maybe n
| n > 0 = Nothing
| n == 0 = Just 1
| even n = f2Maybe (n `div` 2) ^ 2
| odd n = (f2Maybe (n `div` 2) ^ 2) * 2

No instance for (Num (Maybe Integer)) arising from a use of ‘^’
In the expression: f2Maybe (n `div` 2) ^ 2
In an equation for ‘f2Maybe’:
f2Maybe n
| n > 0 = Nothing
| n == 0 = Just 1
| even n = f2Maybe (n `div` 2) ^ 2
| odd n = (f2Maybe (n `div` 2) ^ 2) * 2