Предположения:Каковы сходства и различия между объективом в Haskell и деструктурированием в Clojure?
- Я хочу, чтобы разобрать вложенную JSON строку.
- Я знаю, что Haskell поощряет решение проблем с системой типов, а Clojure избегает системы типов, предпочитая решать проблему с структурами данных.
- Я знаю, что на обоих языках этот процесс называется уничтожение того, - но это не имеет другое имя в Clojure, в то время как в Haskell это также называется с помощью линзы, так что я звоню Clojure один уничтожение того, и перемещение на
мы можем видеть, что мы можем создать lenslike this в Haskell:
{-# LANGUAGE TemplateHaskell #-}
import Control.Lens
initialState :: Game
initialState = Game
{ _score = 0
, _units =
[ Unit
{ _health = 10
, _position = Point { _x = 3.5, _y = 7.0 }
}
]
}
health :: Lens' Unit Int
health = lens _health (\unit v -> unit { _health = v })
Это пур поза - получить значение health
из структуры данных game
.
Мы можем сделать деструктурирующие like this в Clojure:
user=> (def book {:name "SICP" :details {:pages 657 :isbn-10 "0262011530"}})
#'user/book
user=> (let [{name :name {pages :pages isbn-10 :isbn-10} :details} book]
(println "name:" name "pages:" pages "isbn-10:" isbn-10))
name: SICP pages: 657 isbn-10: 0262011530
Цель состоит в том, чтобы получить вложенные значения для имени, страницы и т.д. из вложенной структуры.
В обоих случаях вы получаете механизм для повторного использования значений из вложенной структуры.
Мой вопрос: Каковы сходства и различия между объективом в Haskell и разрушением в Clojure?
Деструктурирование Clojure на самом деле более похоже на сопоставление образцов в Haskell. – mdorman