Haskell有固定类型

时间:2017-08-18 20:13:46

标签: haskell

我有两种类型,假设它们都有monoid实现。有没有办法让另一种类型指定包含X或Y?或者这不是正确的方法吗?

data X = X [Int]
data Y = Y Double

2 个答案:

答案 0 :(得分:9)

OP已在评论中澄清他们希望某些类型Either X Y的“实例行为”。通常,在这种情况下您使用newtype

newtype EitherXY = EitherXY (Either X Y)

如果您还不知道,newtypes可以有类似记录的展开功能。

newtype EitherXY = EitherXY { unwrap :: Either X Y } deriving (...)

您也可以自动派生某些类型类(与数据声明一样)。可派生类的集合取决于编译器版本和已启用的扩展集。我不会elaborate在这里。

答案 1 :(得分:9)

最好只做

data X_Or_Y = InX X | InY Y

此类型与X Y同构,但使用/ pattern匹配比使用newtype更容易,因为它只有2层嵌套构造函数