是否有一些Haskell扩展可以创建更复杂的数据构造函数,然后GADT?有没有办法在Haskell中做更多的“动态”数据构造函数?
假设我想创建一个数据结构,是一个有序列表,并有类似的数据构造函数(:)
与列表工作,具有类型签名:
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
所以结构将永远是一个有序的结构。 (如果这是一个很好的做法,我现在不会这么做,我只是提供了我想要的那种行为的最简单的例子)。
当然我可以使用函数(>>>)
,但是我没有模式匹配和其他好处我会拥有它>>>
是一个数据构造函数。
有没有办法做到这样的事情?