8
基本的には、{-# LANGUAGE PolymorphicKinds, ConstraintKinds, TypeFamilies #-}
(必要に応じて以上)を指定すると、タイプレベルの演算子Constraint
のタイプレベルの式に対して(~)
が動作しますか?私は答えをグーグルで試したが、運がなかった。制約の等価性
基本的には、{-# LANGUAGE PolymorphicKinds, ConstraintKinds, TypeFamilies #-}
(必要に応じて以上)を指定すると、タイプレベルの演算子Constraint
のタイプレベルの式に対して(~)
が動作しますか?私は答えをグーグルで試したが、運がなかった。制約の等価性
はい、可能です。種類の種類Constraint
は原子型制約の有限集合であるため、それらの等価性を非常に簡単にテストできます。
PolyKinds
拡張は必要ありません。また、多態性制約を引数として渡すという実用的な方法がないので、この種の等式が実際に役立つ状況はほとんどありません。したがって、制約等式はすべての場合に同値化されます(Show ~ Show
ここをクリック):
{-# LANGUAGE ConstraintKinds, TypeFamilies #-}
type Bla c1 c2 a = (c1 a, c2 a, c1 ~ c2)
foo :: Bla Show Show a => a -> IO()
foo = print
main = foo "Bla"
質問は奇妙ですが、よく尋ねられます。好奇心の中で、あなたは拘束平等で何をしますか? –
@Daniel Wagner私は、ジェネリック関数システムを使用するクロスパラダイムEDSLを書いています。さまざまな理由から、タイプクラスを直接使用することはできません。私はこれを使わないと逃げることができますが、それは非常にぎこちないタイプになり、おそらくいくつかの不必要な制限につながります –