2015-01-27 12 views
6

Czy ktoś może wyjaśnić, * jakie są soczewki w zakresie OCaml?Co to ** soczewki ** w świecie OCaml

Próbowałem google, ale prawie wszystkie z nich są w świecie Haskella.

Szkoda tylko kilka prostych pokazów dla niego w świecie SML, podobnie jak to, co jest, co może być wykorzystane do itp

+1

Czy mówisz o rzeczach takich jak bumerang? https://alliance.seas.upenn.edu/~harmony/ – PatJ

+0

@PatJ nie, mówię o rzeczach z obiektywów w Haskell, ale OCaml też to ma. https://www.fpcomplete.com/school/to-infinity-and-beyond/pick-of-the-week/basic-lensing –

Odpowiedz

8

Obiektyw jest parę funkcji (getter i setter), które są pod dane -Struktura. To naprawdę takie proste. Obecnie istnieje library dla nich

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

przykład (przy użyciu SML biblioteki wymienione powyżej) do krawca,

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 

Podczas tworzenia soczewek razem, można zobaczyć go jako sposób na unikaj konieczności pisania with stale podczas pracy z rekordami. Możesz również zobaczyć, że ppx do tworzenia tych soczewek byłby bardzo pomocny. Yaron recently posted on the caml-list pracują nad czymś, co byłoby podobne do obiektywu.

Ważny wgląd w van Laarhoven Lens definition(PDF) pokazuje, w jaki sposób jedna funkcja (fmap) danego Funktora może wykonywać te operacje (ustawić i uzyskać i bardzo pomocna funkcja aktualizacji).

+0

Czy "zestaw" jest imperatywny czy funkcjonalny? –

+0

funkcjonalna, zauważ, że powyższa funkcja zwraca ''a', a nie' unit'. – nlucaroni

+0

Były one pierwotnie nazywane referencjami funkcjonalnymi; które mogą pomóc w wyszukiwaniu dalszych informacji. – nlucaroni