是否有一些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
所以結構將永遠是一個有序的結構。 (如果這是一個很好的做法,我現在不會這麼做,我只是提供了我想要的那種行爲的最簡單的例子)。
當然我可以使用函數(>>>)
,但是我沒有模式匹配和其他好處我會擁有它>>>
是一個數據構造函數。
有沒有辦法做到這樣的事情?