これは不可能のようですが、私が取り組んでいることの例を次に示します。
{-# 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"
withとinPolyKinds
の上のインスタンスはアリティにすることができます。または、コードは正しく動作しますが、より高いアリティの をサポートするには、任意の数の追加インスタンスを追加する必要があります。これらの 2 つのインスタンスを「任意の引数に完全に適用される」ことを意味する単一のインスタンスに結合する方法はありますか?t
Proxy t
* -> *
* -> * -> *
t
t
k