型の値を受け入れる関数を書きたいと思います。この関数には、すべての型と一緒にマルチパラメーター型クラスのインスタンスがあります。このようなもの(関数の署名test
は違法です):
class Test a b
test :: forall a. (forall b. Test a b) => a -> a
そのような制限を表現する方法はありますか?
型の値を受け入れる関数を書きたいと思います。この関数には、すべての型と一緒にマルチパラメーター型クラスのインスタンスがあります。このようなもの(関数の署名test
は違法です):
class Test a b
test :: forall a. (forall b. Test a b) => a -> a
そのような制限を表現する方法はありますか?
達成しようとしていることによっては、より良い解決策があるかもしれません。
しかし、制約パッケージを使用して、あなたが求めていることも可能です。
{-# LANGUAGE FlexibleContexts, ConstraintKinds, MultiParamTypeClasses #-}
import Data.Constraint.Forall
class Test a b
test :: Forall (Test a) => a -> a
test = undefined