Haskell将多行代码视为单个函数调用

时间:2015-07-23 08:39:11

标签: haskell

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功能块作为两个单独的语句运行!!

1 个答案:

答案 0 :(得分:7)

确保您以相同方式缩进pureputStrLn行(因此请勿使用制表符进行缩放,而使用空格进行另一行)。如果ghc认为putStrLn进一步缩进,那么它将被视为pure的参数。

如果需要,您也可以在Haskell中使用分号:

pureCall :: String -> IO ()
pureCall x = do {
  pure x ;
      putStrLn "inside child function"
  }

按照您的预期工作。

(另请注意,您的代码输入效果不佳:pure不是IO a类型。)