
Hi i have a problem in my code! here is my code: -- Baic I/O and Loop (50 Points) evalpoly = do putStr "What is the degree of polynomial: " degree <- getLine coeffs <- (funcOfCoeff ((read degree::Int)+1) []) putStr "What value do you want to evaluate at: " value <- getLine putStr "The value of the polynomial is: " putStr (show (polyEvaluate (coeffs) (read value :: Float) )) putStr "\n" --function loop to get coefficient-- funcOfCoeff 0 coeffs = do --to check the degree of 0 return coeffs --return list of coefficient funcOfCoeff degree coeffs = do putStr ("What is the x^" ++ show(degree-1)) putStr " coefficient: " coeff <- getLine loop <- funcOfCoeff (degree-1) ((read coeff :: Int) : coeffs) return loop polyEvaluate (coeffs) x = do powers <- zip coeffs (iterate (+1) 0) result <- map (\(a,b)-> a+b) powers —PROBLEM IS HERE!!!! return result here is error message: in very bottom function (polyEvaluate), why is not working “result <- map (\(a,b) -> a+b) powers” ??? in Prelude, it is working Thanks!

putStr (show (polyEvaluate (coeffs) (read value :: Float) ))
Here ``polyEvaluate`` is inferred as a Show(able), However, ``polyEvaluate``
definition on the bottom returns a monad. (In haskell, meaning of return is
quite different than imperative programming language).
It's encouraged to write pure functions without effects, don't use monad
unless it's really necessary. rewrite ``polyEvaluate`` as below should make
the example compile.
polyEvaluate (coeffs) x = map (\(a, b) -> a+b) . zip coeffs . iterate (+1)
$ 0
Thanks
baojun
On Thu, Apr 21, 2016 at 8:33 PM Eunsu Kim
Hi
i have a problem in my code!
here is my code:
-- Baic I/O and Loop (50 Points)
evalpoly = do putStr "What is the degree of polynomial: " degree <- getLine coeffs <- (funcOfCoeff ((read degree::Int)+1) []) putStr "What value do you want to evaluate at: " value <- getLine putStr "The value of the polynomial is: " putStr (show (polyEvaluate (coeffs) (read value :: Float) )) putStr "\n"
--function loop to get coefficient--
funcOfCoeff 0 coeffs = do --to check the degree of 0 return coeffs --return list of coefficient
funcOfCoeff degree coeffs = do putStr ("What is the x^" ++ show(degree-1)) putStr " coefficient: " coeff <- getLine loop <- funcOfCoeff (degree-1) ((read coeff :: Int) : coeffs) return loop
polyEvaluate (coeffs) x = do powers <- zip coeffs (iterate (+1) 0) result <- map (\(a,b)-> a+b) powers —PROBLEM IS HERE!!!! return result
here is error message:
in very bottom function (polyEvaluate), why is not working “result <- map (\(a,b) -> a+b) powers” ???
in Prelude, it is working
Thanks! _______________________________________________ Beginners mailing list Beginners@haskell.org http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners

Do you intend to use list monad? Since you bind the result of zip into powers, powers has type (a,b). try changing that line:
let powers = zip coeffs (iterate (+1) 0)
As Baojun says, you'd better to write pure function
and isolate I/O from it.
2016-04-22 12:33 GMT+09:00 Eunsu Kim
Hi
i have a problem in my code!
here is my code:
-- Baic I/O and Loop (50 Points)
evalpoly = do putStr "What is the degree of polynomial: " degree <- getLine coeffs <- (funcOfCoeff ((read degree::Int)+1) []) putStr "What value do you want to evaluate at: " value <- getLine putStr "The value of the polynomial is: " putStr (show (polyEvaluate (coeffs) (read value :: Float) )) putStr "\n"
--function loop to get coefficient--
funcOfCoeff 0 coeffs = do --to check the degree of 0 return coeffs --return list of coefficient
funcOfCoeff degree coeffs = do putStr ("What is the x^" ++ show(degree-1)) putStr " coefficient: " coeff <- getLine loop <- funcOfCoeff (degree-1) ((read coeff :: Int) : coeffs) return loop
polyEvaluate (coeffs) x = do powers <- zip coeffs (iterate (+1) 0) result <- map (\(a,b)-> a+b) powers —PROBLEM IS HERE!!!! return result
here is error message:
in very bottom function (polyEvaluate), why is not working “result <- map (\(a,b) -> a+b) powers” ???
in Prelude, it is working
Thanks!
_______________________________________________ Beginners mailing list Beginners@haskell.org http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners
participants (3)
-
Baojun Wang
-
Chul-Woong Yang
-
Eunsu Kim