似乎这是不可能的,但这是我工作的一个例子:
{-# LANGUAGE PolyKinds , MultiParamTypeClasses , FlexibleInstances , OverlappingInstances #-}
data Proxy a = Proxy
class Test pt t where
test :: pt -> t -> IO ()
instance Test (Proxy t) t where
test _ _ = putStrLn "MATCHES"
-- I would like to combine these:
instance Test (Proxy t) (t a) where
test _ _ = putStrLn "MATCHES2"
instance Test (Proxy t) (t a b) where
test _ _ = putStrLn "MATCHES3"
--etc.
instance Test (Proxy t) x where
test _ _ = putStrLn "FAIL"
我们inPolyKinds
上面的 and 我们的实例可以是 arity ,或者and 代码可以正常工作,但是支持更高arity 的 s 需要添加任意数量的额外实例。有没有办法将这两个实例组合成一个实例,这意味着“完全应用于任何参数”?t
Proxy t
* -> *
* -> * -> *
t
t
k