내가 Control.Lens를 사용Control.Lens를 사용하여 목록의 i 번째 요소를 업데이트하는 방법은 무엇입니까?
data Outer = Outer { _list :: [ Inner ] }
data Inner = Inner { _bool :: Bool }
의 라인을 따라 몇 가지 데이터 유형을 가지고,이
boolValue <- gets (^. list . to (!! i) . inner)
I처럼 (A '국가 외부'모나드 내부) i 번째 내부의 _bool에 액세스 할 수 있습니다 또한 (나의 이해에 의해) 그러나
list ^. (to (!! i)) ^. inner %= True
처럼 뭔가이 값을 업데이트 할 수 있도록하고 싶습니다, '받는 사람'기능 만 게터가 아닌 진정한 렌을 만듭니다 s는 getter 또는 setter로 사용할 수 있습니다.
그래서 어떻게하면이 필드를 업데이트 할 수있는 렌즈로 변환 할 수 있습니까?
'ix'와'element' 사이의 차이점을 명확히 해줄 수 있습니까? 나는 Gabriel의'element'를 더 간단하게 보았 기 때문에'Index' 대신'Int'를 사용했습니다. 연결된 문서에서'ix'가 허용하는 것보다 더 일반적입니다 - 엄격하게 더 일반적입니까? – ajp
나는 '요소'에 대해 생각하지 않았다. 정확히 하나가 다른 것보다 일반화 된 것은 아닙니다 ...'ix'는 특정 인덱스 유형 (예 :'Int','Map's with 색인 유형, 도메인과 함게 기능). 'element'는'Traversable' 타입을 취하고 왼쪽에서 오른쪽으로'Int' 인덱스를 셉니다. 이 경우 그들은 코니 시드에서 일어난다. – shachaf
필자는 그것을 테스트하지는 않았지만'ix'가이 특별한 경우에 좀 더 효율적이라고 생각합니다 (주로'Indexing'이 좋은 코드를 생성 할 수있는 방법을 찾지 못해서 ... :-(다른 누군가는 시험에 오신 것을 환영합니다.) 또한 다소 특별 수업입니다. – shachaf