2014-10-02 1 views
5

SF은 이미 어디에서나 정의 되었습니까? 아니면 이름이 있습니까?`Const`와 펑터의 이름?

type SF a f = (,) a :. f 

functor-combo 표기법을 사용하여 같은

data SF a f x = SF a (f x) 

instance Functor f => Functor (SF a f) where 
    fmap g (SF a fx) = SF a (fmap g fx) 
+0

다른 펑터가 포함 된 펑터를 선언하는 것처럼 보입니다. –

+0

AFAIK 거기에 이미 하나도 없지만 그것이 내가 사용하지 않은 임의의 패키지의 구석에 존재하지 않는다는 것을 의미하지는 않습니다. – bheklilr

+0

@ Code-Apprentice, 저는 Functor Transformer를 정의하고 있습니다. 'SF a f'는 functor'f'와 같습니다만, 그것에 덧붙여진'a' 타입의 추가 값을 가지고 있습니다. – Artyom

답변

4

귀하의 펑 보인다.

(내가 어떻게 든 조성물을 이용하기보다는 제품 및 Const를 사용하여 보는 것을 선호합니다.)

+2

': .'의 더 많은 주류 이름은'transformer' 패키지의'Compose'입니다. –

1

당신은 단지 정의 할 수 있습니다 펑 제품

data (f :* g) a = P (f a) (g a) deriving Functor 

다음 직접

type SF a f = Const a :* f 
그것을 쓰기