Haskell转换类型错误

Kub*_*ski 1 haskell type-conversion

我正在Haskell中编写一个简单的程序,它允许用户输入2的幂的指数

power a = 2^a
main = do
   number <- readLn
   let x = (read number :: Int)
   power x
Run Code Online (Sandbox Code Playgroud)


我想出我需要转换StringInt但仍然会出现以下错误:No instance for (Num (IO t0)) arising from a use of 'power'
我如何使其工作?

Ada*_*ith 6

当你写出类型时它会有所帮助.

power :: (Num a, Integral b) => b -> a
power a = 2^a

main :: IO ()
main = do
  number <- getLine
  let x = read number :: Int
  power x
Run Code Online (Sandbox Code Playgroud)

但让我们来看看这些东西真的会回归.power看起来不错,但是main试图回归Num a,而不是回归IO ().main并不意味着返回值 - 你应该对它们做些什么.也许你想要print结果?print :: Show a => a -> IO ()

main :: IO ()
main = do
  number <- getLine
  let x = read number :: Int
  print $ power x
Run Code Online (Sandbox Code Playgroud)

  • 或者使用原始的`number < - readLn`.但是没有必要'读'``````readLn`已经为你做了.只需`打印$ power number` (4认同)