【发布时间】:2010-02-12 16:08:35
【问题描述】:
是否有一些 Haskell 扩展可以创建比 GADT 更复杂的数据构造函数?
假设我想创建一个有序列表的数据结构,并有一个类似于(:) 的数据构造函数,它可以处理列表,带有类型签名:
data MyOrdList a where
(>>>) :: (Ord a) -> a -> MyOrdList a -> MyOrdList a
但我希望(>>>) 具有特定的行为,如下所示:
(>>>) :: (Ord a) => a -> [a] -> [a]
x >>> [] = [x]
x >>> xs = low ++ [x] ++ high
where low = filter (<x) xs
high = filter (>x) xs
因此结构将始终是有序结构。 (如果这是一个好习惯,我现在不知道,我只是提供我想要的行为类型发生的最简单的例子)。
当然我可以使用函数(>>>),但是我将没有模式匹配和其他好处我会拥有它>>>是一个数据构造函数。
有没有办法做这样的事情?
【问题讨论】:
标签: data-structures haskell constructor