Haskell:如何在递归函数中使用Maybe类型?

Haskell:如何在递归函数中使用Maybe类型?,haskell,recursion,types,Haskell,Recursion,Types,假设我想构造一个函数,将一串字母转换为字符列表 例如,我们输入abc,它将输出[a,b,c] 我构建了函数: tester:: String-> [Char] tester []= [] tester (x:xs)= case x of a -> a: (tester xs) b -> b: (tester xs) c -> c: (tester xs) otherwise -> [n,o] Haskell给出了n和o不在范围

假设我想构造一个函数,将一串字母转换为字符列表

例如,我们输入abc,它将输出
[a,b,c]

我构建了函数:

tester:: String-> [Char]
tester []= []
tester (x:xs)= case x of
    a -> a: (tester  xs)
    b -> b: (tester  xs)
    c -> c: (tester  xs)
    otherwise -> [n,o]
Haskell给出了
n
o
不在范围内的错误。 但是
n
o
都是字符,不是吗?因此,
[n,o]
是一个符合输出类型的
[Char]
。有什么问题


我记得在某个地方读到过,字符串只是一个字符列表,
string
[Char]
一样吗?

你使用的
Char
类型错误,文字被写入
'n'
'o'


你是对的,
String
只是
[Char]
的别名,所以
“no”
['n','o']

的缩写,这与
可能
无关。不是。
tester
只是代码中的一个字符序列,但它不是一个
字符串。您必须对字符使用
,例如
['n','o']
“no”
。另外,
a->…
将始终匹配。你想要
'a'->…
。听着,我喜欢越来越多的人进入Haskell,我在这里尽量表现得温和,但也许自学Haskell不应该是你第一次接触编程语言?也许你可以试试一门不错的“编程入门”课程。(我听说了很多关于他们的好消息)最近有一些问题的答案是,“你必须引用你的角色。”我想知道他们是否有关联,以及这些教程或大学课程在哪里引起了混乱。@DanielMartin我理解你的观点,但是我认为把Haskell作为第一语言学习并没有什么错。从命令式编程到纯FP编程,人们通常必须放弃某些习惯(“我如何修改
x
?”),而预先学习FP可以让它更简单。@chi,我明白你的意思,但是如果你接近Haskell的时候几乎没有编程经验,以至于引用的文本和变量名之间的区别令人惊讶,那么你不应该试图独自完成这一切。在网上找一门课程或一本书,甚至是一步一步地浏览。不要只是拿起ghci/ghc从零开始。(尽管如此,我仍然认为学习Haskell作为第一种编程语言不是一条路——尽管我听说Racket作为第一种编程语言有很多好处)