在the code from Scrap Your Zippers,什麼是以下行的意思是:Haskell的類型關鍵字
type Move a = Zipper a -> Maybe (Zipper a)
類型是一個類型的同義詞,並使用相同的數據構造,所以這是沒有意義的。這裏如何使用?如你所說,
在the code from Scrap Your Zippers,什麼是以下行的意思是:Haskell的類型關鍵字
type Move a = Zipper a -> Maybe (Zipper a)
類型是一個類型的同義詞,並使用相同的數據構造,所以這是沒有意義的。這裏如何使用?如你所說,
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。
更多的問題:將函數moveQ ::移動一個 - > B - >(拉鍊A - > B) - >拉鍊A - > B翻譯moveQ ::拉鍊a - >也許(拉鍊a) - > b - >(拉鍊a - > b) - >拉鍊a - > b或移動Q ::(拉鍊a - >也許(拉鍊a)) - > b - >(拉鍊a - > b) - >拉鍊a - > b,那是,到一個函數參數? – user2340939
@ user2340939否 - 它的行爲方式與'(a - > b) - > c'類似,因爲'a - > b - > c'相當於'a - >(b - > c)'。想想把它擴展爲括號。 – AJFarmar
這是一個類型同義詞(或類型別名)。它只是意味着任何你看到「Move X」的地方,你都可以用'Zipper X - > Maybe(Zipper X)'來替換它。 – Rufflewind
我不知道它也可以用作簽名的類型別名。現在很清楚,謝謝! – user2340939
@ user2340939這真的是它唯一可以使用的東西。簽名只是一種類型。 –