2014-10-02 10 views
5

Czy SF jest już zdefiniowany w dowolnym miejscu, czy przynajmniej ma nazwę?Nazwa produktu `Const` i funktora?

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

Wygląda na to, że deklarujesz funktor, który zawiera inny funktor. –

+0

AFAIK już tam nie ma, ale to nie znaczy, że nie istnieje w rogu jakiegoś losowego pakietu, z którego nigdy nie korzystałem. – bheklilr

+0

@ Code-Apprentice, definiuję transformator funktorowy. 'SF a f' jest tym samym co funktor' f', ale przenosi do niego dodatkową wartość typu "a". – Artyom

Odpowiedz

4

Twój funktor wygląda

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

użyciu functor-combo notacji.

(jakoś wolę patrzeć na to za pomocą kompozycji, zamiast produktu i Const.)

+2

Bardziej ogólna nazwa dla twojego ': .' to' Komponuj' z pakietu 'transformatora'. –

1

Można po prostu zdefiniować produkty funktor

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

a następnie zapisać go bezpośrednio

type SF a f = Const a :* f 
Powiązane problemy