Haskell Language
이교 자
수색…
통사론
- bimap :: (a -> b) -> (c -> d) -> pac -> pbd
- 먼저 :: (a -> b) -> pac -> pbc
- 두 번째 : (b -> c) -> pab -> pac
비고
압연기 Functor
의 작동은 단일 유형 매개 변수에서 공변입니다. 만약 예를 들어, f
A는 Functor
,이어서 소정 fa
및 형태의 기능 a -> b
하나는 얻을 수 fb
(의 사용을 통해 fmap
).
Bifunctor
는 두 가지 유형 매개 변수에서 공변입니다. f
가 Bifunctor
이고, 주어진 fab
과 두 개의 함수, 즉 a -> c
와 b -> d
bimap
사용하여 fcd
얻을 수 있습니다.
first
int로서 간주되어야 fmap
, 제 1 타입 파라미터를 통해 second
int로서 fmap
제, 이상과 bimap
각각 제 1 및 제 2 타입 파라미터를 통해 두 가지 기능 covariantly 매핑으로 생각되어야한다.
Bifunctor의 일반적인 인스턴스
2 요소 튜플
(,)
는 Bifunctor
인스턴스가있는 유형의 예입니다.
instance Bifunctor (,) where
bimap f g (x, y) = (f x, g y)
bimap
은 한 쌍의 함수를 취하여 튜플의 각 구성 요소에 적용합니다.
bimap (+ 2) (++ "nie") (3, "john") --> (5,"johnnie")
bimap ceiling length (3.5 :: Double, "john" :: String) --> (4,4)
Either
Either
의 집 인스턴스 Bifunctor
값인지에 따라 적용하는 두 가지 기능의 하나를 선택 Left
또는 Right
.
instance Bifunctor Either where
bimap f g (Left x) = Left (f x)
bimap f g (Right y) = Right (g y)
첫 번째 및 두 번째
첫 번째 인수에만 공변 매핑하거나 두 번째 인수 만 매핑하려는 경우 first
또는 second
를 사용해야합니다 ( bimap
대신).
first :: Bifunctor f => (a -> c) -> f a b -> f c b
first f = bimap f id
second :: Bifunctor f => (b -> d) -> f a b -> f a d
second g = bimap id g
예를 들어,
ghci> second (+ 2) (Right 40)
Right 42
ghci> second (+ 2) (Left "uh oh")
Left "uh oh"
Bifunctor의 정의
Bifunctor
는 두 가지 유형 매개 변수 ( f :: * -> * -> *
)가있는 유형의 클래스이며, 둘 다 동시에 공분산 될 수 있습니다.
class Bifunctor f where
bimap :: (a -> c) -> (b -> d) -> f a b -> f c d
bimap
은 한 쌍의 fmap
연산을 데이터 유형에 적용하는 것으로 생각할 수 있습니다.
f
형에 대한 Bifunctor
의 올바른 인스턴스는 functor 법칙 과 유사한 bifunctor 법칙을 충족해야합니다.
bimap id id = id -- identity
bimap (f . g) (h . i) = bimap f h . bimap g i -- composition
Bifunctor
클래스는 Data.Bifunctor
모듈에 있습니다. GHC 버전 7.10 이상인 경우이 모듈은 컴파일러와 함께 번들로 제공됩니다. 이전 버전에서는 bifunctors
패키지를 설치해야합니다.