在吸气剂和定位器期间组成具有外部类型的镜片

时间:2016-03-01 21:30:08

标签: haskell lens

假设我有一个函数,它使用外部值

中的其他内部值来提取一些内部值
phonegap serve

然后我有一个函数,使用这个inner2值

在外部值和其他值之间创建一个镜头
func :: outer -> inner1 -> inner2

有没有办法创建另一个函数,使用inner1值在外部值和结果值之间创建一个镜头?

existingLensFunc :: inner2 -> Lens' outer result

换句话说,有没有更好的方法来写这个?

finalLens :: inner1 -> Lens' outer result

1 个答案:

答案 0 :(得分:5)

让我们不要理解类型......

existingLensFunc
   :: Inner2 -> (∀ f . Functor f => (Result -> f Result) -> Outer -> f Outer)
   ≡  ∀ f . Functor f => Inner2 -> (Result -> f Result) -> Outer -> f Outer

finalLens
   :: ∀ f . Functor f => Inner1 -> (Result -> f Result) -> Outer -> f Outer

在这里有一个显而易见的“抓住”Outer的地方:从最后一个论点开始。

finalLens inner1 fres outer = existingLensFunc (func outer inner1) fres outer