Function Haskell中的函数定义

Function Haskell中的函数定义,function,haskell,Function,Haskell,我开始学习哈斯凯尔语的时候说“学你一个好哈斯凯尔!”我犯了一个奇怪的错误,我找不到原因 以下是我键入的代码: let xs = [if x < 3 then "bang" else "boom" | x <- xs] 让xs=[如果x

我开始学习哈斯凯尔语的时候说“学你一个好哈斯凯尔!”我犯了一个奇怪的错误,我找不到原因

以下是我键入的代码:

let xs = [if x < 3 then "bang" else "boom" | x <- xs]

让xs=[如果x<3那么“砰”或者“砰”| x你对
xs
的定义是递归的,也就是说你在自己的定义中使用了
xs
。我认为这不是你想要的


由于您在列表理解中使用了
“bang”
“boom”
,Haskell知道
xs
必须是字符串列表(因为
xs
等于列表理解的结果)。此外,您还说
x
xs
的一个元素(
x尝试为表达式指定一个类型

xs = [if x < 3 then "bang" else "boom" | x <- xs]
它是类型为
String
(又称
[Char]
)的表达式

因此
xs::[String]
。由于描述列表元素的表达式中的
x
取自列表
xs
本身,因此它也是一个
字符串,用于比较

if x < 3
从表达式
x<3
,我们得到

  • 来自文本的
    Num
    约束
  • 类型
    String
    来自
    x
    是从
    String
    s列表中提取的事实
因此,我们需要一个
Num
实例来创建一个类型良好的表达式

通常,
String
没有
Num
实例(有用的实例是什么?),因此会出现类型错误

如果
xs
是函数的参数

boom xs = [if x < 3 then "bang" else "boom" | x <- xs]
boom xs=[如果x<3,则“bang”否则“boom”| x

表示“X”等于“砰”和/或“砰”的列表,但条件是这些元素应该进行测试,该死的,比我快几秒钟….+1感谢你们两人的答案;它们是互补的。感谢你们两人的答案;它们是互补的。
if x < 3 then "bang" else "boom"
if x < 3
3 :: Num a => a
boom xs = [if x < 3 then "bang" else "boom" | x <- xs]
let xs = ... 
let boom xs =...