是否有任何有趣的模块处理函数的逆图像?

时间:2012-10-24 05:25:34

标签: haskell

我刚刚发现自己编写了如下代码:

import Prelude hiding (id, (.))
import Control.Category
import Control.Monad ((<=<))

-- | Intended law:
--
--     map forward . backward == id
--
data Invertible a b = 
    Invertible { forward :: a -> b
               -- Maybe switch from [a] to Monad m => m a? (Requires RankNTypes)
               , backward :: b -> [a] }

instance Category Invertible where
    id = Invertible id (:[])
    f . g = Invertible { forward  = forward f . forward g
                       , backward = backward g <=< backward f
                       }

我试图在关于Haskell的网页中搜索Google使用术语“反向图像”或“preimage”,但没有运气。你们当中有没有人走过我现在所走过的路,发现了这片土地?

我已经知道Invertible a不是Functor,因为当你尝试实施fmap :: (a -> r) -> Invertible a b -> Invertible a r时,backward . fmap f没有合理的价值(没有合理的功能)类型(a -> r) -> (b -> [a]) -> r -> [a])。但也许还有一些其他有趣的操作,我只是不知道。

0 个答案:

没有答案