注意:如果这个问题有些奇怪,那是因为我最近才接触到Haskell,并且仍在适应函数式思维方式。
考虑像 Maybe 这样的数据类型:
每个使用我的数据类型的人都会编写类似以下的函数:
考虑像 Maybe 这样的数据类型:
data MyOwnMaybe a = MyOwnNothing | MyOwnJust a
每个使用我的数据类型的人都会编写类似以下的函数:
maybeToList :: MyOwnMaybe a -> [a]
maybeToList MyOwnNothing = []
maybeToList (MyOwnJust x) = [x]
现在,假设我在以后的某个时间想要扩展这个数据类型
data MyOwnMaybe a = MyOwnNothing | MyOwnJust a | SuperpositionOfNothingAndJust a
我该如何确保每个人的函数都在编译时出错?
当然,有可能我没有“领悟”代数数据类型,也许我根本不应该这样做,但是考虑到一个数据类型 Action
data Action = Reset | Send | Remove
看起来添加额外的Action
(如Add
)并不那么罕见(我也不想冒险让所有这些函数无法处理我的新Action
)。
maybeToList _ = []
的情况不同。 - Werner de Groot