2017-05-22 27 views

回答

1

在這一點上,每次有關Hask的問題都會被提出時,它必定是鏈接到Hask article on the Haskell wiki的一種陳詞濫調,但在這裏。

爲了擴大對維基一點我認爲這個問題的答案是非常枯燥的,是的,但僅僅是因爲Hask是定義這樣Hask的對象是各類那種⭑。完整的定義是:

  • 讓每一種類型的⭑都是Hask的對象,除了undefined。我認爲「是」基本上是你的問題的答案,直到惡魔的倡導者提出undefinedseq,此時答案必然變得越來越複雜。

  • 讓類型爲A -> B的每個函數都是從對應於類型A的對象到對應於類型B的對象的箭頭。

  • 非常小心choose a notion of equality for the arrows, which may or may not existsee ensuing discussion)或可能丟棄seq或者完全放棄。

  • 讓對應於id :: A -> A的箭頭成爲每個對象的標識箭頭。

  • .讓,這是締&角,對應於箭頭的組合物,它必須是締&℃。

這決不意味着你可以Haskell程序與模型中唯一的類別,但我們做到這一點,與Hask名祝福,因爲很多其他概念的話,自然對應哈斯克爾計算。例如,這個類別的內幕管理者可以方便地用類似⭑ - >⭑的方式來表示,其中(合法)功能取決於fmap :: ((a :: ⭑) -> (b :: ⭑)) -> ((f a :: ⭑) -> (f b :: ⭑))

0

是的,但在Haskell中有*以外的其他類型,DataKinds將不會成爲您的Hask類別的一部分。

{-# LANGUAGE DataKinds #-} 
data Foo = Bar 

'Bar的一種是Foo,所以你不能用它->,所以這將是你的Hask之外,但仍然是一個Haskell的類型。

相關問題