为什么我在' ='上得到解析错误?

时间:2014-09-03 15:15:48

标签: haskell function-composition

我目前正在处理99个haskell问题

我无法理解为什么我在这个函数中出错: -

repli :: [a] -> Int -> [a]
repli xs n  = concatMap (take n . repeat) xs

1 个答案:

答案 0 :(得分:5)

如果您使用的是REPL,请尝试

>>> let repli xs n = concatMap (take n . repeat) xs

在REPL(ake GHCi)中编写Haskell与将其写入文件有点不同。首先,变量绑定和函数定义必须以let为前缀,如

>>> let a = 1
>>> let f x = x + a

另一方面,您通常必须在一行中输入所有定义。您可以使用分号分隔单独的定义,例如

>>> let a = 1; b = 2

或者您可以使用多行模式,例如

>>> :{
>>> let c = 3
>>>     d = 4
>>> :}

如果您已经了解了monads(对吗?)那么您可以想象您在REPL中编写的所有内容都是do块的一部分,其类型为IO (),并且执行了语句当你输入它们。所以在文件中你可以写

main :: IO ()
main = do
  name <- getLine
  let greeting = "Hello " ++ name ++ "!"
  putStrLn greeting

而在REPL中你会写

>>> name <- getLine
Chris
>>> let greeting = "Hello " ++ name ++ "!"
>>> putStrLn greeting
Hello Chris!
>>>