@ has joined the channel
F
を使うにあたって、F $ \p f -> runF ...
という変換を何度も適用する必要があるので、modF mod x = F $ p f -> let (p', f') = mod (p, f) in runF x p' f'
modF mod2 (modF mod1 x)
を modF (mod2 . mod1) x
に書き換えるRULEを書いてやると速くなりそう、という見通しを立てました。F
はCodensityという構成と同一視できるとありました。すると、 modF
は圏論の言葉で一体何に相当するのか、というのに現在悩んでいて、件の論文を読み込んだり頑張っています。 https://www.reddit.com/r/haskell_jp/comments/81q83q/kan%E6%8B%A1%E5%BC%B5%E3%81%AE%E8%AA%AC%E6%98%8E/F
はCodensityという構成と同一視できる」というのは正確ではなくて、kan-extensionsパッケージを見る限り F f
と Codensity (Free f)
が同一視できるような感じですねmodF :: (forall x. (g x -> x) -> f x -> x) -> F f a -> F g a modF mod x = F $ \pr fr -> runF pr (mod fr)