数据类型的设计:隐式或显式状态

时间:2012-09-26 10:13:47

标签: haskell types abstract-data-type

在处理某些内部状态时,我经常遇到设计数据类型的问题。假设我有以下定义:

data Action a b c = Action { on :: a -> (c, b); off :: b -> a -> c }

读取:一个动作,可以打开或关闭(需要类型a的值,产生类型c的某个值)。要将其关闭,需要b类型的特殊数据,该数据由之前的on调用给出。

现在我设计一个动作来跟踪它是打开还是关闭:

data StatefulAction a b c = Off (Action a b c) | On b (Action a b c)

但我也可以使用它:

data State b = Off | On b   -- or type State b = Maybe b
data StatefulAction a b c = SA (Action a b c) (State b)

哪一个更好?

1 个答案:

答案 0 :(得分:3)

在语义上,它是完全相同的。

从语法上讲,我猜你应该选择什么使代码更具可读性。您也可以使用type个同义词。