많은 유형의 광학 장치는 van Laarhoven 표현을 가지고 있습니다.
예를 들어, Lens
유형 Lens s t a b
은 다음과 같이 나타낼 수 있습니다.
Functor f => (a -> f b) -> s -> f t
유사하게는 Traversal
, 스와핑, 비슷한 방법으로 표현 될 수 Functor
에 대한 제약 조건을 Applicative
:
Applicative f => (a -> f b) -> s -> f t
Monocle 및 Arrow 와 같은 여러 광학 프레임 워크 는이라는 유형을 정의합니다 Optional
.
단안경의 광학 계층 구조의에서 Optional
사이 적합 Lens
하고Traversal
내가 알고있는 것처럼 : A는 경우 Traversal
는 A입니다 Lens
가질 수 많은 제로 목표를, 다음은 Optional
유사한입니다 Lens
가질 수 제로 하나에 목표를.
Monocle에서 Optional
함수 쌍으로 정의됩니다.
getOrModify :: s -> Either t a
set :: (b, s) -> t
단안경 소스 코드의 댓글은 그것이를 대표하는 수도 있습니다 제안 Optional
“약한으로 PLens
약한 PPrism
“
대표 할 수 있습니까 Optional
밴 Laarhoven 기능 등을?
답변
Functor / Applicative / Monad 계층 구조가 더 세분화 된 경우이를 나타내는 방법이 있습니다. 특히:
class Functor f => Pointed f where
pure :: a -> f a
type Optional s t a b = forall f. Pointed f => (a -> f b) -> s -> f t
Affine
클래스 계층 구조에서 깔끔하게 렌즈 라이브러리에 유형이 지정 될 수 있습니다 .