0

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

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)

哪一个更可取?

4

1 回答 1

3

从语义上讲,它是完全相同的东西。

从语法上讲,我想您应该选择使代码更具可读性的内容。type您也可以为此使用同义词。

于 2012-09-26T10:23:00.260 回答