2012-11-08 10 views
10

Powiel możliwe:
lenses, fclabels, data-accessor - which library for structure access and mutation is betterData.Lens lub Control.Lens

ja zamierzam wykorzystać i nauczyć pakiet soczewki na moim następnym projekcie Haskell. Prawie zdecydowałem się na pakiet Data.Lens, gdy znalazłem ten wpis, który wymienia soczewki van Laarhoven w pakiecie Control.Lens.

Nie do końca rozumiem różnice, aby zdecydować, który z nich użyć. Który pakiet sugerujesz, abym się uczył/używał w projekcie realnego świata?

Dzięki.

lenses, fclabels, data-accessor - which library for structure access and mutation is better

+4

Co jest nie tak z odpowiedzią tego linku SO? – Pubby

+0

Coś * może * być nie tak z odpowiedzią tego linku SO, ale jeśli nie powiesz nam, co chcesz wiedzieć, że nie ma w tej odpowiedzi, nie dostaniesz informacji, o które prosisz. – Ben

+2

Zgaduję, że to trzeci punkt widzenia, którego szukam. Ten post został napisany przez twórcę obu pakietów. On daje pewne porównanie między 2, ale trochę ponad moją głową. – MFlamer

Odpowiedz

14

Control.Lens jest prawie na pewno to, czego chcesz. Data.Lens był pierwszy i jest prostszy, ale Control.Lens ma wiele zalet i jest aktywnie rozwijany.

Inne niż soczewki, Control.Lens ma wiele podobnych typów, jak przechodzenia przez (a przechodzenie jest jak soczewki, które mogą odnosić się do wartości n zamiast jednego), fałdy, odczyt/modyfikować tylko do obiektywów, soczewek indeksowane, isomorphisms .. Jest również wyposażony w znacznie większą bibliotekę użytecznych funkcji i predefiniowanych soczewek dla standardowych typów bibliotek, szablon Haskell do wyprowadzania soczewek i garść kodu dla innych rzeczy, takich jak ogólne zamki i uniwersalne przejście w stylu uniplate.

Jest to duża biblioteka - nie musisz jej używać, ale dobrze jest mieć to, co chcesz, już napisane.

Główną zaletą Data.Lens jest to, że prostsze, i jako takie nie wymaga rozszerzenia poza Haskell 98. Ale zauważ, że jeśli po prostu chcesz wyeksportować Control.Lens obiektyw -Style z biblioteki, można to zrobić bez wychodzenia Haskell 98 - w rzeczywistości, bez zależności od pakietu w ogóle.

+0

Po nieco dalszych badaniach ostatniej nocy, doszedłem do tego samego wniosku. Dzięki za doskonałe odpowiedzi. – MFlamer

6

Jeśli masz do czynienia z realnym świecie Project (tm), bardzo polecam Control.Lens. Edwardk włożył w to wiele świeżego wysiłku i jestem pewien, że chciałby usłyszeć o twoim przypadku użycia. Moim zdaniem stanie się to kanoniczną biblioteką Lens. Uważam, że można bezpiecznie powiedzieć, że wszystko, co można zrobić z Data.Lens, można zrobić za pomocą Control.Lens.

0

Data.Lens jest znacznie prostszy i łatwiejszy w obsłudze. Control.Lens ma bardzo dużą liczbę modułów i używa rozszerzeń językowych, aby wykonać zadanie.

Powiązane problemy