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)
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)
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.)
Ein Mainstream-Name für Ihr '.' ist' Compose' aus dem 'transformer'-Paket. –
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
Es sieht so aus, als ob Sie einen Funktor deklarieren, der einen anderen Funktor enthält. –
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
@ 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