haskell - 如何在镜头中进行功能类型检查

标签 haskell haskell-lens lenses

我一直在阅读this post了解镜头。他们最初定义了一个
像这样输入同义词:

type RefF a b = forall f. Functor f => (b -> f b) -> (a -> f a)

Const 定义如下:
newtype Const a b = Const { getConst :: a }
get怎么办函数类型检查:
get :: RefF a b -> a -> b
get r = getConst . r Const

getConst 的类型是这样的:
getConst :: Const a b -> a
r Const的类型我想是这样的:
r Const = (b -> f b) -> (Const -> f Const)

那么两者如何getConstr Const得到的组成给 a -> b ?

最佳答案

r的类型用 const 仿函数代替 f 得到;因为我们需要一个 b结果必须是第一个参数(实际上只有 x 可以在 Const x y 类型中找到)

    r :: (b -> Const b b) -> (a -> Const b a)

现在论证很简单:那只是 Const构造函数。
    r Const :: a -> Const b a

如果你用 getConst :: Const b a -> b 进行后期合成,你最终得到
    getConst . r Const :: a -> b

关于haskell - 如何在镜头中进行功能类型检查,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22911456/

相关文章:

regex - Haskell 的 Text.Regex.subRegex 使用 TDFA 实现?

haskell - 在 Haskell 中显示函数类型

haskell - 元组的一元更改

Haskell 镜头 : how to make view play nicely with traverse?

scala - 如何使用单片眼镜修改嵌套 map 和scala中的另一个字段

haskell - 列出单子(monad)转换器

performance - 使用 Data.ByteString 实现 unix 的 "cat"程序的 Haskell 性能

haskell - 有没有直接的方法将多个记录字段的 setter 组合到一个 setter ?

haskell - 使用 DuplicateRecordFields 创建镜头

haskell - 如何使用 Maybe 的镜头设置功能?