data Index k = EmptyIndex | PrimIndex k (Index k) | FullIndex (Index k) (Index k) deriving (Show)
{-
*Main> let ind1 = PrimIndex 3 EmptyIndex
*Main> ind1
PrimIndex 3 EmptyIndex
*Main> let ind2 = PrimIndex 4 ind1
*Main> ind2
PrimIndex 4 (PrimIndex 3 EmptyIndex)
*Main> let ind3 = FullIndex ind1 ind2
*Main> ind3
FullIndex (PrimIndex 3 EmptyIndex) (PrimIndex 4 (PrimIndex 3 EmptyIndex))
-}
也就是说,这个想法是相同类型的容器可以是空容器,也可以是基元容器,或者是递归容器的容器。(避免骑自行车)
(可能这里的名字Index不太好,但我觉得代码的意思很清楚)
为了不问两次,我会立即问一个相关的问题,我几乎可以肯定,答案是“不”。从它们用于[]标准列表的意义上说,是否可以为自定义容器(如这个↑)使用“异国情调”括号?
您描述的类型称为树。它在标准库中,但看起来不像你的。
如果您使用的是
nhc98.它看起来像这样。
之后你就可以写了
+$ 1 $$ 2 $$ 3 $+ :: YourType。不幸的是
[,,您]无法重新加载。这在模式匹配中也不起作用。