我在Monad.Reader问题22中找到了这个:
data Color = R | B
data Node a = E | N Color (Node a) a (Node a)
type Tree a = Node a
为什么不这样呢?
data Node a = E | N Bool (Node a) a (Node a)
type Tree a = Node a
答案 0 :(得分:8)
Color
也在类型级别上造成干扰。
此外,想象一下你想要丰富所考虑的颜色数量;然后Bool
将不再与Color
同构。尽管在这段特定的代码中不太可能发生这种情况,但它被认为是一种普遍的良好做法。例如,我认为写data WeekDay = Monday | Tuesday | ...
比写type WeekDay = Int -- ranging 0..7
更好。
如果到目前为止我还没有说服你,那么请继续使用Bool
代替。让我们永远不要混淆哪些是你从一开始就可以避免的事情而浪费你的时间。
答案 1 :(得分:5)
在这里使用Bool
有什么好处?它被定义为data Bool = False | True
,所以它的表现完全相同;布尔运算对Color
没有意义。
编辑:给出评论
@bheklilr因为我不想使用类型系统
答案显然是文章的作者想要使用类型系统。如果你不想,没有人强迫你,但
在这种情况下,根本不清楚为什么要使用Haskell;类型系统是其最大的优势之一;
这在Haskell中被认为是坏风格。