Gui*_*rel 4 haskell lenses haskell-lens
我想编写一个函数,在Lens stab的帮助下将函数(a - > b)转换为函数(s - > t)(编辑:我意识到这个函数已经存在Setter s t a b并且被称为over或者%~,但是它没有回答下面使用镜头获取值的问题).看起来很简单,但我遇到了一个令人困惑的类型错误.要创建一个更小的示例,请考虑以下函数,它只返回镜头从第二个参数中提取的值:
f :: Lens s t a b -> s -> a
f l s = s ^. l
Run Code Online (Sandbox Code Playgroud)
这不编译.在^的第二个参数中有2个错误.(即l):
但是,以下编译:
f :: Getter s a -> s -> a
f l s = s ^. l
Run Code Online (Sandbox Code Playgroud)
然后,我意识到在镜头类型的层次结构中,Lens和Getter之间的箭头指定s = t,a = b.有没有办法使用常规从Lens s t a b类型a的值中获取类型的值s?
使用的问题^.不是它的实现,而是它的类型签名.如果我们解除其定义,我们可以将其用于f:
f :: Lens s t a b -> s -> a
f l s = getConst $ l Const s
Run Code Online (Sandbox Code Playgroud)
如果扩展以下定义,则最容易理解Lens:forall (f :: * -> *). Functor f => (a -> f b) -> s -> f t.
| 归档时间: |
|
| 查看次数: |
176 次 |
| 最近记录: |