Ger*_*Nab 1 haskell functional-programming
我不理解以下代码的新类型定义;
newtype Prod a = Prod { getProd :: a }
instance Num a => Monoid (Prod a) where
mempty = Prod 1
Prod x `mappend` Prod y = Prod (x * y)
Run Code Online (Sandbox Code Playgroud)
然后我运行以下查询:
Ghci > getProd $ Prod 2 `mappend` Prod 5
-> 10
Run Code Online (Sandbox Code Playgroud)
我如何获得此结果以及getProd如何参与此结果?
我如何得到这个结果?
让我们看一下如何评估:
Prod 2 `mappend` Prod 5
Run Code Online (Sandbox Code Playgroud)
产量
Prod 10
Run Code Online (Sandbox Code Playgroud)
背tick只是糖 mappend (Prod 2) (Prod 5)
这是有道理的,因为定义为mappend:
Prod x `mappend` Prod y = Prod (x * y)
Run Code Online (Sandbox Code Playgroud)
它Prod为每个参数匹配模式,并将其数字分别绑定到x和y。然后将这两个乘积并用于Prod以其乘积作为值构造一个新的乘积。
最后,为了从产品中获得结果,您必须使用getProd,这只是将值包装在内Prod。
| 归档时间: |
|
| 查看次数: |
92 次 |
| 最近记录: |