haskell - Haskell 从函数打印硬编码值
问题描述
我正在开始我对函数式编程的第一次探索Haskell
。我在打印硬编码值时有点挣扎。我创建了一个模型,代表汽车及其可以行驶的档位。我想要做的只是civicNinetyOne
在我打电话时打印我的硬编码printCar.
但是当我加载文件时我不断收到错误。我在下面发布了错误,这是一个缩进错误,但从我在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
另一方面, 是具有 type 的值Car
,而不是 type 的函数() -> 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
块。)
推荐阅读
- javascript - 如何根据下拉选择(Angular 8)过滤表中的数据?
- c - 退出线程并返回
- android - NewApi lint 不同的行为
- php - 如何为用户通知构建数据库
- javascript - ReactJS - 事件冒泡 - 找出事件链
- python - Groupby 和 sum 并作为新行插入前列
- javascript - 如何在 Node.js 应用程序中最好地保护 MongoDB 数据库 URL
- sql - 如何在 Oracle SQL 中优化或在没有循环的情况下执行此操作
- google-sheets - 阻止用户在数据输入后编辑自己的单元格
- c# - 如何在类似于 Netbeans 的 Visual Studio 中获取方法列表?