首先,我将解释我的问题的简化版本,然后是实际问题。
考虑max
和(+)
max :: Ord a => a -> a -> a
(+) :: Num a => a -> a -> a
请注意,它们的约束条件不同。我想写一个F型家庭,所以我有类似的东西:
f :: a -> F a
那样
f max
与
有不同的类型f (+)
现在实际问题。
鉴于(来自我的polydata包裹):
data Poly (c :: * -> Constraint) where
Poly :: { getPoly :: (forall a. c a => a) } -> Poly c
我希望能够在不明确指定约束的情况下编写mkPoly (+)
。
我想也许我可以创建一个将类型转换为约束的类型族,因为它是一个相当机械的过程。
这是我的问题背后的背景,但我认为问一个更简单的问题将是一个良好的开端。