7

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

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
                       }

我曾尝试在 Google 上搜索有关 Haskell 的页面中使用术语“反向图像”或“原像”的情况,但没有运气。你们有没有人走过我现在走过的路,发现了这片土地?

我已经弄清楚这Invertible a不是 a Functor,因为当您尝试实现时, (no sensible function of type )fmap :: (a -> r) -> Invertible a b -> Invertible a r没有合理的价值。但也许还有其他一些我不知道的有趣操作。backward . fmap f(a -> r) -> (b -> [a]) -> r -> [a]

4

0 回答 0