私は昨日 haskell から始めましたが、この素晴らしい新世界の岸辺でまだ完全に迷子になっています。今、私は次の問題に遭遇しました:
整数と別の変数に魔法をかける関数があるとしましょう。
makeTuple :: Int -> a -> (Int, a)
makeTuple n x = (n, x)
ここで、この関数をリストのすべての要素に適用したいと思います。これまでのところ、問題はありません。マッピングは、Python (私の出身地) での毎日のパンとバターでもあるからです。
makeTupleList :: Int -> [a] -> [ (Int, a) ]
makeTupleList n x = map (makeTuple n) x
私が理解している限り、バイナリ関数 makeTuple は整数 n で部分的に適用されるため、x の各要素にマップできる単項関数になります。これまでのところ、すべて順調です。
しかし、makeTuple 関数に次のような別の署名がある場合はどうすればよいでしょうか。
makeTuple2 :: a -> Int -> (Int, a)
makeTuple2 x n = (n, x)
ローマに通じる道はたくさんあります。結果は同じですが、道は異なります。明らかに、マッピングはもう機能しません。関数は Int を期待し、a を取得します。
makeTupleList2 :: Int -> [a] -> [ (Int, a) ]
makeTupleList2 n x = map (makeTuple2 n) x -- boolshit
これは当然のことでした。私の - おそらく Pythonic すぎる - 回避策は、別の関数を使用して、パラメーターをどこに渡すかです。
makeTupleList2 :: Int -> [a] -> [ (Int, a) ]
makeTupleList2 n x = map (\x -> makeTuple2 x n) x
質問: 部分的に適用されたパラメーターが一番左にない場合に関数を部分的に適用する、関数型の Haskell スタイルの好ましい方法は何ですか?