在这种code存在重复片段相匹配: insert x (AATree t) = case insert' x t of
Same t -> AATree t
Inc t -> AATree t
insertBlack :: (Ord a) => a -> AANode Black (Succ n) a -> AnyColor (Succ n) a
insertBlack
我创建了一个非常简单的问题示例,我使用的是GADT和DataKinds。我的真实应用显然更复杂,但这清楚地表明了我的情况的本质。我试图创建一个函数,可以返回任何类型的值(T1,T2)的测试。有没有办法做到这一点,还是我进入依赖类型的领域?这里的问题看起来很相似,但我无法从他们那里找到(或理解)我的问题的答案。我刚刚开始了解这些GHC扩展。谢谢。 similar question 1 similar
我有仅曾经与两个不同的参数,ForwardPossible和()中使用的GADT: -- | Used when a forward definition is possible.
data ForwardPossible = ForwardPossible deriving (Eq, Ord, Typeable, Data, Show)
-- | GADT which accepts fo
说我有以下GADT: data Stage a b where
Comb :: Stage a b -> Stage b c -> Stage a c
FMap :: (a -> b) -> Stage a b
我现在想要的是这样的一个功能: run (a `Comb` b) = (a,b)
run (FMap f) = (FMap f,FMap id)
我将如何构
以下程序类型检查和编译: import Control.Arrow
data Ns = Na | Nb | Nc | Nd deriving Show
data Net a where
Uni :: a -> Net a
Serial :: Net a -> Net a -> Net a
Branch :: Show a => Net a -> Net (Ne