我对type和newtype有点困惑。据说newtype只能包含一个字段。我还找到了一条帖子here。
但仍然不太清楚。
因此,如果您想为一个对象声明不同的类型类实例 特定类型,或者想将类型抽象化,可以将其包装在 newtype,它将被认为与类型检查器不同,但是 在运行时相同。
任何示例都将有所帮助。谢谢!
答案 0 :(得分:2)
从您发布的报价中收集的一个示例用法可能是声明两个Int
Monoid。有多种方法来考虑Int
的Monoid(乘法或加法),也许您希望使用多个。您不能为Int
定义一个以上的monoid实例,但是可以创建两个新类型并为其提供单独的实例。
newtype SumInt = SumInt Int
newtype ProdInt = ProdInt Int
instance Monoid SumInt where
mempty = SumInt 0
(SumInt a) `mappend` (SumInt b) = SumInt (a + b)
instance Monoid ProdInt where
mempty = ProdInt 1
(ProdInt a) `mappend` (ProdInt b) = ProdInt (a*b)