Haskell 从函数打印硬编码值
Haskell Printing a hardcoded value from a function
我开始了我对函数式编程的第一次探索 Haskell
。我在打印硬编码值时遇到了一些困难。我创建了一个代表汽车的模型和它可以达到的档位。我想要做的只是在我调用 printCar.
时打印我的硬编码 civicNinetyOne
但是当我加载文件时我总是收到错误消息。我在下面发布了错误,这是一个缩进错误,但从我在 LearnYouAHaskell 上读到的内容来看,调用函数声明是正确的。有人可以指出这个问题的原因吗?谢谢
错误
first_program.hs:10:1: error:
parse error (possibly incorrect indentation or mismatched brackets)
|
10 | printCar:: () -> Car | ^
代码
data Car = Car{
gears :: [String],
currentGear :: String,
brokeGears :: [String],
shiftStroke:: Strokes
}
let civicNinetyOne = Car ["gear1", "gear2", "gear3", "gear4", "gear5"] "gear1" ["gear4"] [("gear1","pull", "gear2"), ("gear2","push", "gear3"), ("gear3","skipShift", "gear5")]
printCar:: () -> Car
printCar = civicNinetyOne
printCar
像任何其他函数一样接受参数;它的参数类型是()
,这意味着只有一个值(也拼写为()
)可以用来调用它。
另一方面,civicNinetyOne
是类型为 Car
的值,而不是类型为 () -> Car
的函数,因此不能将其本身分配给 printCar
。
正确的定义是
printCar :: () -> Car
printCar () = civicNinetyOne
它会被称为
> printCar ()
Car {gears = ["gear1","gear2","gear3","gear4","gear5"], currentGear = "gear1", brokeGears = ["gear4"], shiftStroke = [("gear1","pull","gear"),("gear2","push","gear3"),("gear3","skipShift","gear5")]}
为了完整起见,let
(正如评论中指出的)在最新版本的 GHCi 中是可选的,在旧版本的 GHCi 中是必需的,但它是 禁止的 在一个模块中。 (交互式解释器的行为有点像隐含的 do
块。)
我开始了我对函数式编程的第一次探索 Haskell
。我在打印硬编码值时遇到了一些困难。我创建了一个代表汽车的模型和它可以达到的档位。我想要做的只是在我调用 printCar.
时打印我的硬编码 civicNinetyOne
但是当我加载文件时我总是收到错误消息。我在下面发布了错误,这是一个缩进错误,但从我在 LearnYouAHaskell 上读到的内容来看,调用函数声明是正确的。有人可以指出这个问题的原因吗?谢谢
错误
first_program.hs:10:1: error:
parse error (possibly incorrect indentation or mismatched brackets)
|
10 | printCar:: () -> Car | ^
代码
data Car = Car{
gears :: [String],
currentGear :: String,
brokeGears :: [String],
shiftStroke:: Strokes
}
let civicNinetyOne = Car ["gear1", "gear2", "gear3", "gear4", "gear5"] "gear1" ["gear4"] [("gear1","pull", "gear2"), ("gear2","push", "gear3"), ("gear3","skipShift", "gear5")]
printCar:: () -> Car
printCar = civicNinetyOne
printCar
像任何其他函数一样接受参数;它的参数类型是()
,这意味着只有一个值(也拼写为()
)可以用来调用它。
civicNinetyOne
是类型为 Car
的值,而不是类型为 () -> Car
的函数,因此不能将其本身分配给 printCar
。
正确的定义是
printCar :: () -> Car
printCar () = civicNinetyOne
它会被称为
> printCar ()
Car {gears = ["gear1","gear2","gear3","gear4","gear5"], currentGear = "gear1", brokeGears = ["gear4"], shiftStroke = [("gear1","pull","gear"),("gear2","push","gear3"),("gear3","skipShift","gear5")]}
为了完整起见,let
(正如评论中指出的)在最新版本的 GHCi 中是可选的,在旧版本的 GHCi 中是必需的,但它是 禁止的 在一个模块中。 (交互式解释器的行为有点像隐含的 do
块。)