thanks Ulrik,it solves the compilation problem. But now I have an execution error (with GHCi) :*Main> (operation "+") 2.0 2.0<interactive>:3:1:Couldn't match expected type `Double -> Double -> t'with actual type `Maybe (Float -> Float -> Float)'Relevant bindings include it :: t (bound at <interactive>:3:1)The function `operation' is applied to three arguments,but its type `String -> Maybe (Float -> Float -> Float)'has only oneIn the expression: (operation "+") 2.0 2.0In an equation for `it': it = (operation "+") 2.0 2.0As I understand it ghci guess that the two 2.0 parameters to my (operation "+") are Double and the function returned by operation expects Float instead, How to solve this ?I tried to replace every Float with Double in my .hs file but still there is a problem*Main> (operation "+") 2.0 2.0<interactive>:3:1:Couldn't match expected type `Double -> Double -> t'with actual type `Maybe (Double -> Double -> Double)'Relevant bindings include it :: t (bound at <interactive>:3:1)The function `operation' is applied to three arguments,but its type `String -> Maybe (Double -> Double -> Double)'has only oneIn the expression: (operation "+") 2.0 2.0In an equation for `it': it = (operation "+") 2.0 2.0Could you explain me what is the -> t at the end of the expected type ?Le lun. 8 févr. 2016 à 15:07, Ulrik Rasmussen <haskell@utr.dk> a écrit :On 2016-02-08 14:54, Olivier Duhart wrote:
> hello,
>
> I am starting with Haskell and trying some little exercices on my own. I
> successfully implemented a reverse polish notation evaluator and I want
> to improve it a little using *Maybe*
> *
> *
> All i want is to implement a function that can returned available
> functions according to its string name
> i.e return (+) when gived "+"
> I also want to return Nothing if the operation is not available (not
> implemented yet).
> So my function should Maybe return a (float -> float -> float)
>
> My current implementation is
>
> operation :: String -> Maybe Float -> Float -> Float
> operation op
> | op == "+" = Just (+)
> | op == "-" = Just (-)
> | op == "*" = Just (*)
> | op == "/" = Just (/)
> | otherwise = Nothing
>
>
> but it failed to compile with the following error :
>
> rpn.hs:64:18:
> Couldn't match expected type `Maybe Float -> Float -> Float'
> with actual type `Maybe a0'
> In the expression: Nothing
> In an equation for `operation':
> operation op
> | op == "+" = Just (+)
> | op == "-" = Just (-)
> | op == "*" = Just (*)
> | op == "/" = Just (/)
> | otherwise = Nothing
>
>
> I don't understand the error :( Do I have to explicitly type the Nothing
> return ?
>
> Could you guide me to a solution or explain me what I am doing wrong,
> please ?
>
> Thanks in advance
>
> Olivier
Hi,
The type String -> Maybe Float -> Float -> Float parenthesizes as
String -> (Maybe Float) -> Float -> Float,
but I think you meant
String -> Maybe (Float -> Float -> Float)
/Ulrik
_______________________________________________
Beginners mailing list
Beginners@haskell.org
http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners
_______________________________________________
Beginners mailing list
Beginners@haskell.org
http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners