haskell-jp / questions #103 at 2023-05-05 21:40:39 +0900

すみません、自己解決しました……! 2 変数関数だったのが問題でした。
2 変数関数が絡むポイントフリースタイルは、別途調べます!
すでに解決すみかもしれませんが、変数がいくつあっても、外側から1つずつ外していけばよいだけなので機械的にできると思います.infix operator がすこし扱いにくいと感じたら, セクションにするか、名前をつけて prefix で使えばよいかと思います.s = (<*>) :: (a -> b -> c) -> (b -> c) -> a -> c とか b = (.) :: (b->c)->(a->b)->a->c など...
f = ((fst <$>) .) . monadicTuple
だいぶ難しいですね……! 機械的と聞いて Pointfree.io を思い出し、正体が分かりました。

(.:) :: (b -> c) -> (a1 -> a2 -> b) -> (a1 -> a2 -> c)
(.:) = (.) . (.)

f = fmap fst .: monadicTuple

競プロ専のため .: 演算子を使っていこうと思います。ありがとうございます!
    f x y = g <$> h x y
=>  { infix の セクション化 }
    f x y = (g <$>) ((h x) y)
=>  { y を外す }
    f x = (g <$>) . (h x)
=>  { infix のセクション化 }
    f x = ((g <$>) .) (h x)
=>  { x を外す }
    f = ((g <$>) .) . h
ほ、ホントだーー!
そしてもう 1 つの積月 (?) の悩みも同様に解けました:
演算子をセクションとして解釈するとき、 (左の要素 演算子) とするか (のぶさん の例) (演算子 右の要素) にするか (僕の例) も機械的に分かりますか?
僕の書いた分は跳躍があった気もしますが……
>> は『左結合』だから……? ともかく機械的にポイントフリースタイルに変換する方法を調べていきたいと思います。とてもスッキリして助かりました!
外したい変数が左にあるときは (演算子 右オペランド) ですね。
    f x = x `g` y
+>  { セクション化 }
    f x = (`g` y) x
=>  { x を外す }
    f = (`g` y)

これは結局
    f x = g x y
+>  { Cコンビネータ }
    f x = flip g y x
=>  { x を外す }
    f = flip g y

と同じなんです。
すごい。。分かりました! たぶんその考えは一生使っていきます!
メモ: C コンビネータ (Wiki)