假设我有一个函数,它使用外部值
中的其他内部值来提取一些内部值phonegap serve
然后我有一个函数,使用这个inner2值
在外部值和其他值之间创建一个镜头func :: outer -> inner1 -> inner2
有没有办法创建另一个函数,使用inner1值在外部值和结果值之间创建一个镜头?
existingLensFunc :: inner2 -> Lens' outer result
换句话说,有没有更好的方法来写这个?
finalLens :: inner1 -> Lens' outer result
答案 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