2010-09-27 69 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