【发布时间】:2020-06-12 10:55:42
【问题描述】:
所以在Haskell monads的解释中,他们举了克隆羊的例子。 然而,它们只给出了数据类型的部分实现:
type Sheep = ...
father :: Sheep -> Maybe Sheep
father = ...
mother :: Sheep -> Maybe Sheep
mother = ...
这使得实验和理解诸如 comb 之类的 monad 的用法变得相当困难:
-- comb is a combinator for sequencing operations that return Maybe
comb :: Maybe a -> (a -> Maybe b) -> Maybe b
comb Nothing _ = Nothing
comb (Just x) f = f x
Sheep应该如何实现?
【问题讨论】:
-
在文章中,重点是无所谓类型如何实现,只要定义了这两个函数即可。
-
@FyodorSoikin 这听起来绝对合乎逻辑然而对我来说重要的是尝试它并真正理解它的重要性。因此,我可以跳出的定义将有助于我的理解。我想这归结为我仍然难以阅读类型定义(例如
m a -> (a -> m b) -> m b),而实际实现有助于获得更多感觉。至于给出的答案,给定的定义是type,答案是data,我还不明白这是怎么发生的。 -
data中的 "data" 是 "datatype" 的缩写。data不创建数据,它创建数据类型。 (Haskell 中无数错误命名选择的又一个案例 )