繁体   English   中英

Haskell新类型定义

[英]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匹配,并将其数字分别绑定到xy 然后将这两个乘积并用于以其乘积作为值构造一个新的Prod

最后,为了从产品中获得结果,您必须使用getProd ,它只是将值包装在Prod内部。

Prod本身并没有做很多事情; 它只是任意类型的包装。 但是,其目的是作为给定Monoid实例(用于乘法)的基础。

Prod x `mappend` Prod y解析为x * y ,因为Num实例为xy提供的*定义都是。 调用getProd只是从结果中提取包装的值。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM