ハローフェローハスケラー。アプリケーションファンクタを複数回適用する方法
私は、適用可能なファンクタ(モナドのインスタンスではない)を持っているとしましょう。 純粋な初期値に複数回適用したいとします。私は連続し 任意の数のアプリケーションにこれを一般化したい場合例えば、
λ> Just (1+) <*> (Just (1+) <*> pure 0)
Just 2
は、私はfold
でそれを行うことができます。この定義の後
applyAppl :: Applicative f => f (a -> a) -> Int -> f a -> f a
applyAppl f n i = foldr (<*>) i $ replicate n f
、
λ> applyAppl (Just (1+)) 10 $ pure 0
Just 10
私は一般化も は、sequenceA
やtraverse
などの高次組み込み応用的なツールの一つで行うことができるという厄介な疑いを持っています。それをできる?
(最初の2つのコメントの下に考慮に入れるように編集。)
書き込みしようとしている関数のタイプを教えてください。 –
「もっと簡単に」とはどういう意味ですか?あなたの関数は1行のコードです。それよりもはるかに簡単にはなりません。 – user2407038
あなたは何をしたいですか?私は何かを考えようとしましたが、実際に何らかの折り畳みに終わりました。そして、あなたは関数をアプリケーションから取り出してhaskの関数にするために '<*>'を呼び出さなければなりません。 – HuStmpHrrr