6

Haskellで二項関数の両方の引数を何らかの変換によって「持ち上げる」最も慣用的な方法はどれですか? このオペレーターの名前を「リフト」にすると、タイプは次のようになると思います

lift :: (a -> b) -> (b -> b -> c) -> (a -> a -> c)

単純な定義は次のようになります

lift t f = \x y -> f (t x) (t y)
4

1 に答える 1

15

これはon(からData.Function) 呼び出されますが、反転した引数があります:

on :: (b -> b -> c) -> (a -> b) -> a -> a -> c
-- lift = flip on

Hoogλeクエリを使用すると、関数を簡単に見つけることができたことに注意してください。liftまた、完全に別の設定、つまりモナド トランスフォーマーで使用されるfunction が既に存在することにも注意してください。

于 2014-07-28T11:54:34.523 に答える