良い一日!
任意の有限サイズのリストを次のような関数引数に変換する関数 g を作成/検索しようとしています
g k [a,b,c,d] = k a b c d
g f [a,b,c] = f a b c = ((((f) $ a) $ b) $ c)
構文的には のようg = foldl ($) f
に見えますが、コンパイラは合理的にその関数の適用に失敗し、次のように答えます。
ghci> let (><) f = foldl ($) f
<interactive>:1:19:
Occurs check: cannot construct the infinite type: b = b1 -> b
Probable cause: `$' is applied to too many arguments
In the first argument of `foldl', namely `($)'
In the expression: foldl ($) f
そのため、実用的な実装を作成できません。あなたはなにか考えはありますか?前もって感謝します!