[英]Haskell newtype definition
我不理解以下代码的新类型定义;
newtype Prod a = Prod { getProd :: a }
instance Num a => Monoid (Prod a) where
mempty = Prod 1
Prod x `mappend` Prod y = Prod (x * y)
然后我运行以下查询:
Ghci > getProd $ Prod 2 `mappend` Prod 5
-> 10
我如何获得此结果以及getProd如何参与此结果?
我如何得到这个结果?
让我们看一下如何评估:
Prod 2 `mappend` Prod 5
产量
Prod 10
背面刻度线只是mappend (Prod 2) (Prod 5)
糖mappend (Prod 2) (Prod 5)
这是有道理的,因为定义了mappend
:
Prod x `mappend` Prod y = Prod (x * y)
它的模式与每个参数的Prod
匹配,并将其数字分别绑定到x
和y
。 然后将这两个乘积并用于以其乘积作为值构造一个新的Prod
。
最后,为了从产品中获得结果,您必须使用getProd
,它只是将值包装在Prod
内部。
Prod
本身并没有做很多事情; 它只是任意类型的包装。 但是,其目的是作为给定Monoid
实例(用于乘法)的基础。
Prod x `mappend` Prod y
解析为x * y
,因为Num
实例为x
和y
提供的*
定义都是。 调用getProd
只是从结果中提取包装的值。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.