関数を実装しようとしていました
every :: (a -> IO Bool) -> [a] -> IO Bool
これがこの質問のトピックでした。明示的な再帰なしでこれを実行しようとしました。私は次のコードを思いついた
every f xs = liftM (all id) $ sequence $ map f xs
私の関数は怠惰ではなかったので機能しませんでした(これは質問で必要でした)ので、そこには賛成票はありません:-)。
しかし、私はそこで止まりませんでした。関数をポイントフリーにして、短くする(そしておそらくもっと涼しくする)ようにしました。引数f
とxs
は式の最後のものなので、私はそれらを削除しました:
every = liftM (all id) $ sequence $ map
しかし、これは期待どおりに機能しませんでした。実際、まったく機能しませんでした。
[1/1]メインのコンパイル(stk.hs、インタプリタ) stk.hs:53:42: 期待されるタイプ`[ma]'と一致しませんでした 推論された型に対して`(a1-> b)-> [a1]-> [b] ' `($)'の2番目の引数、つまり` map ' `($)'の2番目の引数、つまり` sequence $ map ' 式:liftM(すべてのID)$シーケンス$マップ 失敗、モジュールのロード:なし。
何故ですか?基本的にカリー化の目的である、末尾の関数の引数を単純に削除できるという印象を受けました。