haskell - 我可以说 Monad 使将某些类型视为同构成为可能吗?

Monad 可以将 Just [1,2] 传递给 ,它与原始 length 函数采用的类型不同>>>= 返回。长度

Just [1,2] >>= return . length

我可以说 Monad 可以使用 Maybe [a] 视为与 [a] 在长度上同构吗(>>=, 返回)? (当然它们并不是真正的同构。)

我可以选择术语“同构”这种情况吗?

最佳答案

你的例子最终说明的是 Maybe 是一个仿函数:如果你有一些 f::a -> b,你可以使用 fmap 把它变成 fmap f::Maybe a -> Maybe b in a way that preserves identities and composition . Monad 是仿函数,具有 \f m -> m >>= return 。 ffmap f m 相同。在你的例子中,我们有 length 函数被 Maybe 仿函数转换。

can I choose term "isomorphic" this situation?

不是真的。 Maybefmap 不是同构。同构需要有一个双向逆来取消它,在这种情况下是这样的:

unFmapMaybe :: (Maybe a -> Maybe b) -> (a -> b)

-- For it to be a two-sided inverse to `fmap`, we should have:
unFmapMaybe . fmap = id
fmap . unFmapMaybe = id

但是,没有 (Maybe a -> Maybe b) -> (a -> b) 函数,因为无法获得 b 结果如果输入 Maybe a -> Maybe b 函数给出了 Nothing。虽然有一些特定的仿函数,其 fmap 是同构的(Identity 是一个例子),但通常情况并非如此。

https://stackoverflow.com/questions/71456947/

相关文章:

perl - 为什么 Scalar::Util::Numeric 安装不正确?

android - 我正在尝试使用安全参数,但是当我将依赖项添加到项目级别 build.gradle

.net - 不可变对象(immutable对象)的约定

asp.net - 在 .net 中,是否有与 Server.HTMLEncode() 相反的函数?

python - 对具有更高优先级正数的绝对值的整数列表进行排序

ios - 通过 FaSTLane "the server responded with statu

python - Julia 代码没有完成而 Python 代码完成了

r - 如何提取R中的第一个字符串

ruby - Rails 将数组合并为数组的数组

r - 提取特定格式的部分字符串