나는 약 Diode을 읽고 있었다, 그리고 그것은 나를 Monocle/Scalaz에 렌즈에 대해 생각했다 : 나는 (조건부)는 중첩 데이터 구조의 깊이 일부를 수정하는 경우 Monocle/Scalaz 렌즈를 사용하여 변경이 있었는지 비교하고 싶다면, 깊은 비교를 할 필요가 있는지 또는 두 데이터 구조 (conditionaly 수정 전과 후에)가 있는지 비교
일반 나무와 매우 유사한 몇 가지 특수한 형식의 데이터 형식이 있습니다. data NestedTree = NT
{ _dummy :: Int
, _tree :: HashMap String NestedTree
} deriving (Show)
makeLenses ''NestedTree
렌즈를 사용하여 필수적으로 내 데이터 유형의
나는이 방법을 잘못된 방법으로 생각할 것입니다. 그러나 스칼라에서 생성자로 무언가를 확장하는 클래스에서 렌즈를 사용하는 데 문제가 있습니다. class A(c: Config) extends B(c) {
val x: String = doSomeProcessing(c, y) // y comes from B
}
나는이 클래스를 변이하는 Lens를
렌즈를 사용하기 시작했고 지금까지는 필자가 작성한 코드베이스의 구체적인 부분에서 사용할 수 없었습니다. 내 목표는 기존 트리 중 하나에 새 노드를 추가하여 Data.Tree에있는 장미 트리 구조를 업데이트하는 것입니다. type MyTree = Tree Id
type Path = [Id]
addToTree :: MyTree -> MyTree -> Pa
내가 기본값으로 만들 중첩 된 경우 클래스의 구조로 구축 된 경로에 옵션 값을 정의 Monocle을 사용하여 기본값이 아니어야하는 요소. isos는 쉽습니다. 나는 내부 요소를 수정하는 일련의 사용 후 조성 탐색을 지정할 수 있습니다 : set/modify는 내부 요소를 수정합니다, 그것은 그 우아하지 않는 것 프림와 불행하게도 object Beta {
스칼라의 렌즈 라이브러리 인 monocle을 사용하여 코드가 출현함에 따라 day 12에 대한 코드를 리팩터링했습니다. 함께 Map.withDefaultValue를 사용하는 방법이있다 : 이 코드를 개선 할 수 있는가 : type Register = String
type Mem = Map[String, Int]
@Lenses
c
가 여기에있어 무엇 형 가족과 함께 기록을 위해 렌즈를 만들려면 : {-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE StandaloneDeriving #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE TemplateHaskell #-}
{-# LANGUAGE MultiParamT
저는 하스켈과 함께 기세를 가지기 시작했고, 내가 일상화 한 추상화를 좋아합니다 (예 : lens). 나는 REST API 렌즈가 함께 사용하는 것이 유용 할 수 있지만 시간이 지나면 사용이 불가능하다는 것을 알고 있습니다. 내가 볼 수있는 주요 문제는 내가 직접 데이터 구조에 접근하지만, 요청 문자열을 출력 아니에요이다 는 (내 렌즈 구문은 아마도 잘못)
과 같은 형식은 Lens'이 -XImpredicativeTypes 확장자 (실제로 GHC에서 지원되지 않음)가없는 형식 생성자로 래핑 할 수없는 순위 2 형식이기 때문에 작동하지 않습니다. 도덕적 가능성이 통과 계속 foo' :: ∀ y . A -> (Lens' B C -> y) -> Maybe y
에 Maybe을 연기하는 것 foo :: A -> Ma
주간 렌즈 문제 시간. newtype Action a = Action
{ runAct :: StateT ActionState (ReaderT Hooks IO) a
} deriving (Functor, Applicative, Monad, MonadState ActionState, MonadReader Hooks, MonadIO)
data