2014-10-02 14 views
5

Ist SF bereits irgendwo definiert oder hat es zumindest einen Namen?Ein Name für ein Produkt von `Const` und einem Funktor?

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

Es sieht so aus, als ob Sie einen Funktor deklarieren, der einen anderen Funktor enthält. –

+0

AFAIK gibt es nicht schon da draußen, aber das bedeutet nicht, dass es nicht in der Ecke eines zufälligen Pakets existiert, das ich nie benutzt habe. – bheklilr

+0

@ Code-Apprentice, definiere ich einen Funktor-Transformator. 'SF a f 'ist dasselbe wie Funktor' f ', aber es enthält einen zusätzlichen Wert des Typs' a '. – Artyom

Antwort

4

Ihr Funktors sieht aus wie

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

functor-combo Notation.

(Ich ziehe es irgendwie an sie mit Zusammensetzung zu suchen, anstatt Produkt und Const verwenden.)

+2

Ein Mainstream-Name für Ihr '.' ist' Compose' aus dem 'transformer'-Paket. –

1

könnten Sie einfach definieren Funktors Produkte

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

und es dann direkt

type SF a f = Const a :* f 
schreiben