Haskellの唯一の結果タイプに関数矢印を適用しますか?
-
13-12-2019 - |
質問
HASKellでは、機能矢印タイプのコンストラクタ( - >)をその右側の型だけに適用することができます(たとえば、( - > a))、型* - > *の型コンストラクタを取得しますか?
解決
いいえ、現在は不可能です。 Haskellの型システムには、ほとんどの場合に有用で便利であることを可能にする、これがそれらの制限の1つです。あなたの最良の選択肢は、NewTypeを使用することです。
newtype FuncFlip r a = FuncFlip { unFuncFlip :: a -> r }
.
newtypesは、コンパイラがタイプチェックする方法を知るためのタグで、タイプ指定ディスパッチ(typeclasses)を正しく型付けする方法を知っています。おそらくあなたはいくつかのtypeclassインスタンスを提供するためにタイプ引数をフリップしたいと思っていました。それは、そのTypeClassの関数を利用したいときはいつでも、FuncFlip
を使用して特定の入力を飾り、unFuncFlip
を使用して特定の出力を採取する必要があります。これは望まれるよりわずかに冗長ですが、それは実際にはそれほど悪くないため、使用したいTypeClassのどのインスタンスを明示的に識別することもできます。
newtypeのインスタンスを作成できます。 これはあなたに便利であることができるかもしれません。
instance Newtype (FuncFlip r a) (a -> r) where
pack = FuncFlip
unpack = unFuncFlip
.
さらに読み上げ: "タイプ" - ライベルコンビナト? "
所属していません StackOverflow