pure :: String -> ()
pure x = unsafePerformIO $ do
print x
return ()
pureCall :: String -> IO ()
pureCall x = do
pure x
putStrLn "inside child function"
这会将编译错误抛出,
The function ‘pure’ is applied to three arguments,
but its type ‘String -> ()’ has only one
我在其他语言中使用分号作为代码行分隔符。但不确定,我如何在haskell中完成它,并将pureCall功能块作为两个单独的语句运行!!
答案 0 :(得分:7)
确保您以相同方式缩进pure
和putStrLn
行(因此请勿使用制表符进行缩放,而使用空格进行另一行)。如果ghc认为putStrLn
进一步缩进,那么它将被视为pure
的参数。
如果需要,您也可以在Haskell中使用分号:
pureCall :: String -> IO ()
pureCall x = do {
pure x ;
putStrLn "inside child function"
}
按照您的预期工作。
(另请注意,您的代码输入效果不佳:pure
不是IO a
类型。)