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 <wntuwntu@gmail.com> wrote:
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