【发布时间】:2016-08-13 21:12:21
【问题描述】:
既然 Maybe 类型与空列表和单例列表的集合同构,那么当我可以使用列表来适应缺席时,为什么还有人想要使用 Maybe 类型?
【问题讨论】:
-
一个地方来寻找我们为什么关心区分同构类型的潜在动机是人们为什么使用和关心
newtype。 -
我会问“当您只需要
Maybe时,为什么要使用列表?”Maybe更具体,并且可以防止许多错误,因为您甚至不能编写错误的代码。它还使您的意图在类型签名中更加清晰。在您可以使用Maybe的情况下(除了可能是非常简短的中间形式),我真的想不出使用列表的好处。是什么引发了这个问题? -
使用列表代替
Maybe的一个例子是在“Haskell 编程”一书中,其中展示了如何从头开始实现Parsermonad(类似于ReadP),并且它的类型为String -> [(a, String)],这很奇怪,因为该列表永远是空的或单例的。不知道为什么会这样,只是举个例子