2015-11-17 49 views
1

所以我是Haskell的新手,我試圖定義一個最長爲4個元素的列表。 到目前爲止我有type IntL = [Int,Int,Int,Int] 但我想這樣做必須有一個更好/正確的方式。 是否有?定義一個列表可以在Haskell中的時間長度

+4

'type IntL = [Int,Int,Int,Int]'根本不應該工作。 –

+0

@BartekBanachewicz在GHC 7.10中,它建議啓用'DataKinds'以便利用類型到類型的提升。如果這樣做,那麼就得到'IntL :: [*]',即'IntL'是一個類型列表。不幸的是,這不是OP要求的。 – chi

回答

6

這在Haskell中存在問題,因爲幻像類型編碼大小需要適當的編譯器支持(否則它非常討厭使用),並且GHC中的類型nats最近出現了。

這就是說librariesexist,只是爲了給你一個想法。

另外,只需使用一個元組。

+0

是一個元組可能工作 –

+6

這取決於。 4個元素的列表和MAXIMUM 4元素的列表之間有很多不同。 –

-1

基本的Haskell類型不如編碼列表的最大長度那麼強大。爲了做到這一點,你必須依賴諸如GADT和幻影類型之類的擴展,但它也不是簡單的。

如果你真的是新手,我建議你學習Monads,IO和其他成語的其他基本概念。

這個網站是一個初始的方法來Haskell的一個非常良好的閱讀:

http://learnyouahaskell.com

+3

我已經低估了。答案似乎是不正確的(例如'Maybe(a,Maybe(a,Maybe(a,也許a))''是一個非常基本的Haskell類型,看起來很像一個最大長度的列表),並且評論將用戶重定向到monad,並且IO看起來不在我的目標中。 –

+0

公平。我的答案實際上是一個非答案,可能不是最適合Stackoverflow的答案,但我發現它更適合新手。 –

5

它可能看起來愚蠢的,它肯定不會擴展,但是怎麼樣

data Max4 a 
    = Empty 
    | One a 
    | Two a a 
    | Three a a a 
    | Four a a a a 

type IntL = Max4 Int?這是基本的,你應該能夠理解它,並且通過對它進行操作你可以學到很多東西。

相關問題