Haskell:语法错误

时间:2017-06-21 23:47:16

标签: haskell haskell-stack

我使用的是Haskell堆栈。

module Len () where

   my_nthele :: String -> Integer -> Char
   my_nthele [] n = ''
   my_nthele (x:xs) n  | n == 0 = x
                       | otherwise = my_nthele xs (n-1)

Haskell解释器显示" src / Len.hs:5:1:错误:     解析错误(可能是错误的缩进或括号不匹配)"

我不知道出了什么问题。

1 个答案:

答案 0 :(得分:2)

syntax for character literals dictates that you need something between the single quotes

  

2.6字符和字符串文字

char  →   '(graphic|space|escape⟨\&⟩)' [remark: heavily simplified]
     

字符文字写在单引号之间,如'a'

因此,''不是字符的有效语法。应该怎么样?没有任何角色可以开始。类型Char不包含不是字符的概念,就像Int不包含不存在的概念一样。

这正是Maybe的用途:

my_nthele :: String -> Integer -> Maybe Char
my_nthele [] n = Nothing
my_nthele (x:xs) n  | n == 0 = Just x
                    | otherwise = my_nthele xs (n-1)

顺便说一句,作为练习,尝试使您的函数更通用,以便也可以使用my_nthele [1..10] 3 == Just 4。这并不难,但让我们一起玩Maybe