gpt4 book ai didi

ocaml - OCaml 世界中的**镜头**是什么

转载 作者:行者123 更新时间:2023-12-04 14:27:09 30 4
gpt4 key购买 nike

谁能解释*什么是 OCaml 中的镜头?

我试着用谷歌搜索,但几乎所有这些都在 Haskell 的世界里。

只是希望在 OCaml 的世界中对它进行一些简单的演示,比如它是什么,它可以用来做什么等等。

最佳答案

镜头是数据结构下的一对函数(getter 和 setter)。真的就是这么简单。目前有library对他们来说,

type ('s,'a) t =
{ get : 's -> 'a;
set : 'a -> 's -> 's; }

裁缝的示例(使用上面列出的 ocaml 库),
type measurements = { inseam : float; }

type person = { name : string; measurements : measurements; }

let lens_person_measurements =
{ get = (fun x -> x.measurements);
set = (fun a x -> {x with measurements = a}); }

let lens_measurements_inseam =
{ get = (fun x -> x.inseam);
set = (fun a x -> {x with inseam = a}); }

let lens_person_inseam =
compose lens_measurements_inseam lens_person_measurements

将镜头组合在一起时,您可以将其视为避免必须写 with 的一种方式。在处理记录时不断。您还可以看到创建这些镜头的 ppx 会非常有帮助。 Yaron recently posted on the caml-list他们正在研究类似于镜头的东西。

van Laarhoven Lens definition(PDF)中的重要见解展示了特定 Functor 的一个函数( fmap )如何执行这些操作(设置和获取以及非常有用的更新函数)。

关于ocaml - OCaml 世界中的**镜头**是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28177263/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com