定义一个列表可以在Haskell中的时间长度
所以我是Haskell的新手,我试图定义一个最长为4个元素的列表。 到目前为止我有type IntL = [Int,Int,Int,Int]
但我想这样做必须有一个更好/正确的方式。 是否有?定义一个列表可以在Haskell中的时间长度
基本的Haskell类型不如编码列表的最大长度那么强大。为了做到这一点,你必须依赖诸如GADT和幻影类型之类的扩展,但它也不是简单的。
如果你真的是新手,我建议你学习Monads,IO和其他成语的其他基本概念。
这个网站是一个初始的方法来Haskell的一个非常良好的阅读:
我已经低估了。答案似乎是不正确的(例如'Maybe(a,Maybe(a,Maybe(a,也许a))''是一个非常基本的Haskell类型,看起来很像一个最大长度的列表),并且评论将用户重定向到monad,并且IO看起来不在我的目标中。 –
公平。我的答案实际上是一个非答案,可能不是最适合*的答案,但我发现它更适合新手。 –
它可能看起来愚蠢的,它肯定不会扩展,但是怎么样
data Max4 a
= Empty
| One a
| Two a a
| Three a a a
| Four a a a a
与type IntL = Max4 Int
?这是基本的,你应该能够理解它,并且通过对它进行操作你可以学到很多东西。
'type IntL = [Int,Int,Int,Int]'根本不应该工作。 –
@BartekBanachewicz在GHC 7.10中,它建议启用'DataKinds'以便利用类型到类型的提升。如果这样做,那么就得到'IntL :: [*]',即'IntL'是一个类型列表。不幸的是,这不是OP要求的。 – chi