定义一个列表可以在Haskell中的时间长度

问题描述:

所以我是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

这在Haskell中存在问题,因为幻像类型编码大小需要适当的编译器支持(否则它非常讨厌使用),并且GHC中的类型nats最近出现了。

这就是说librariesexist,只是为了给你一个想法。

另外,只需使用一个元组。

+0

是一个元组可能工作 –

+6

这取决于。 4个元素的列表和MAXIMUM 4元素的列表之间有很多不同。 –

基本的Haskell类型不如编码列表的最大长度那么强大。为了做到这一点,你必须依赖诸如GADT和幻影类型之类的扩展,但它也不是简单的。

如果你真的是新手,我建议你学习Monads,IO和其他成语的其他基本概念。

这个网站是一个初始的方法来Haskell的一个非常良好的阅读:

http://learnyouahaskell.com

+3

我已经低估了。答案似乎是不正确的(例如'Maybe(a,Maybe(a,Maybe(a,也许a))''是一个非常基本的Haskell类型,看起来很像一个最大长度的列表),并且评论将用户重定向到monad,并且IO看起来不在我的目标中。 –

+0

公平。我的答案实际上是一个非答案,可能不是最适合*的答案,但我发现它更适合新手。 –

它可能看起来愚蠢的,它肯定不会扩展,但是怎么样

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

type IntL = Max4 Int?这是基本的,你应该能够理解它,并且通过对它进行操作你可以学到很多东西。