2010-09-27 71 views
3

如何定义一个函数来接受我的类型并返回它的原语“synonym”?例如:反向数据构造函数

newtype MyInt = MakeInt Int 

,我想一个函数:

unMyInt :: MakeInt -> Int 

回答

6

通过图案构造匹配:

unMyInt (MakeInt i) = i 
+0

谢谢,我在哪里可以读到这个构造意味着什么? – Ramesh 2010-09-27 23:33:15

+1

@Ramesh:在任何haskell教程或书籍(查找关于模式匹配的章节)。这意味着“对于任何我来说,将'unMyInt'应用于'MakeInt i'值是'i'”。 – sepp2k 2010-09-27 23:36:06

+0

@Ramesh:例如,看看来自真实世界Haskell的[关于模式匹配的章节](http://book.realworldhaskell.org/read/defining-types-streamlining-functions.html#deftypes.pattern)。 – sepp2k 2010-09-27 23:38:54

15

其他(有时更舒适的方式)是记录语法:

newtype myInt a = MyInt { unMyInt :: Int } 

这自动定义了一个函数

unMyInt :: MyInt -> Int 
+0

谁低估了我?他能解释一下吗? – fuz 2010-10-02 08:44:07