2015-01-08 51 views
1

the code from Scrap Your Zippers,什麼是以下行的意思是:Haskell的類型關鍵字

type Move a = Zipper a -> Maybe (Zipper a) 

類型是一個類型的同義詞,並使用相同的數據構造,所以這是沒有意義的。這裏如何使用?如你所說,

+5

這是一個類型同義詞(或類型別名)。它只是意味着任何你看到「Move X」的地方,你都可以用'Zipper X - > Maybe(Zipper X)'來替換它。 – Rufflewind

+0

我不知道它也可以用作簽名的類型別名。現在很清楚,謝謝! – user2340939

+0

@ user2340939這真的是它唯一可以使用的東西。簽名只是一種類型。 –

回答

2

type允許我們製造同義詞。這意味着我們可以製作長和複雜類型的縮短版本。這是String基本類型的定義。是的,這是如何定義的:

type String = [Char] 

這使我們能夠在編寫類型時使類型更具可讀性;大家更喜歡看到String[Char]

您也可以使用類似於data關鍵字的類型參數。以下是一些示例:

type Predicate t = t -> Bool 
type Transform t = t -> t 
type RightFoldSignature a b = (a -> b -> b) -> b -> [a] -> b 
type TwoTuple a b = (a,b) 
type ThreeTuple a b c = (a,b,c) 

...等等。所以,對於你所擁有的聲明來說,沒有什麼特別奇怪的 - 作者正在製作一個類型的同義詞,以便更容易編寫和更清晰地閱讀,大概可以用在作者想要創建的函數類型中。

向你學習Haskell對此有own little section,可以找到不同聲明的列表here和文章here

+0

更多的問題:將函數moveQ ::移動一個 - > B - >(拉鍊A - > B) - >拉鍊A - > B翻譯moveQ ::拉鍊a - >也許(拉鍊a) - > b - >(拉鍊a - > b) - >拉鍊a - > b或移動Q ::(拉鍊a - >也許(拉鍊a)) - > b - >(拉鍊a - > b) - >拉鍊a - > b,那是,到一個函數參數? – user2340939

+0

@ user2340939否 - 它的行爲方式與'(a - > b) - > c'類似,因爲'a - > b - > c'相當於'a - >(b - > c)'。想想把它擴展爲括號。 – AJFarmar