2014-10-02 2 views
5

Есть SF, который уже определен в любом месте или, по крайней мере, имеет имя?Название продукта `Const` и функтора?

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, я определяю трансформатор-функтор. 'SF a f' совпадает с функтором' f', но он несет дополнительное значение типа 'a', прикрепленного к нему. – Artyom

ответ

4

Ваш функтор выглядит

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

используя functor-combo обозначения.

(я как-то предпочитаю смотреть на это с помощью композиции, а не с использованием продукта и Const.)

+2

Еще одно основное название вашего ': .' -' Compose' из пакета 'transformer'. –

1

Вы можете просто определить функтор продуктов

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

, а затем написать его непосредственно

type SF a f = Const a :* f 
Смежные вопросы