2015-12-13 13 views
6

適用ファンクタfが与えられたので、私は新しい適用ファンクタRev ffのように変更しましたが、効果の順序は逆になりました。ここでは、次のとおりです。効果の順序を逆にする適用ファンクタ

import Control.Applicative 

newtype Rev f a = Rev {unRev :: f a} 

instance Functor f => Functor (Rev f) where 
    fmap f (Rev fx) = Rev (fmap f fx) 

instance Applicative f => Applicative (Rev f) where 
    pure x = Rev (pure x) 
    (Rev ff) <*> (Rev fx) = Rev (pure (\x f -> f x) <*> fx <*> ff) 

私の質問は

  1. ある(それはApplicativeの法律に従わない)有効Applicativeインスタンスということですか?
  2. この構成には名前がありますか?これはどこかに隠れているモジュールがありますか?
+0

もし 'Backwards'アプリケーションファンクタに興味があれば、' Data.Functor.Reverse'が好きかもしれません。逆方向に折って行きます。興味深いのは、「tardis」状態変圧器です。 – dfeuer

答えて

10

IRCのフレンドリーな人々は、transformersパッケージによって提供されるBackwards申請者を指しています。標準ライブラリで利用可能な(<**>)オペレーターが好きかもしれません。

関連する問題