質問

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
.

さらに読み上げ: "タイプ" - ライベルコンビナト? "

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top