在Control.Lens中,我们有Getter可以访问嵌套结构。 Getter有使用和使用,但我不清楚它们是如何工作的。因此,如果有人可以提供一些使用或使用的简单示例,那就太棒了。
为什么我需要知道它?因为我在Haskell中读了一些implementation,并且在其中使用了“use”和“use”。特别是它说:
inRange <- uses fsCurrentCoinRangeUpperBound (coinIndex <=)
如果上面的代码只是用于比较(&lt; =)两个值,那么为什么我们需要“使用”呢?
答案 0 :(得分:0)
当我试图在Use cases of makePrisms with examples处对你的另一个问题的回答中说清楚时,你需要了解许多必要的知识才能理解这一点。
首先,你必须非常了解镜头。从你的另一个问题来看,你刚刚开始他们。这很棒!它们非常酷,解决这些问题非常好。
但是,我在这里给你一个很大的警告,Haskell的一个危险就是如此强大,并且可以如此表达和简洁,尝试跳过这些东西似乎很容易。
如果您非常了解代数数据类型,例如,您可以轻松阅读代码,并且思考您完全不了解它就能理解它。这可能导致复杂的混乱,你会觉得你不理解任何一个,实际上可能是真的,但这种感觉在学习Haskell时并不是一种好感。
我不希望你这样。
所以我鼓励你学习镜片,但如果你没有Lens所需的知识,那么我鼓励你先学习。在某种程度上理解这些东西并不是很难太多,但对于那些不熟悉至少简单类型,参数化类型,代数的程序员来说,编写Lens的方式并不容易或容易接近数据类型,类型类,Functor类型类,要真正理解它,您需要了解Functor的几个实例。
同样,如果你想了解use
和uses
,这只在处理State
值时才有意义,那么我建议你几乎不可能理解什么是State
发生在不知道Lens
是什么的情况下,以及use
做了什么。
uses
和State
用于获取镜头和状态值,并查看do
值内的当前状态。因此,在某种程度上,您确实需要了解Monad
语法正在执行的操作,因此State
某个类别的类型类以及MonadState
/ re.sub('[abcdefghijklmnopqrstuvwxyz]', 'nopqrstuvwxyzabcdefghijklm', Alpha)
如何工作从那个角度来看。
如果跳过这些预备中的任何一个,你会感到困惑。
我希望这有帮助!我祝你好。