Sorry über schlechten Titel. Ich habe einen problematischen Datentyp, den ich als Instanz von funktor definieren möchte.Haskell: Funktor von diesem Datentyp?
Also im Grunde, was ich habe, ist etwas, das
sample_logp :: s a -> a
hat und es sollte
(a -> b)
zu
sample_logp :: s b -> b
mit umgewandelt werden. Der folgende Code erreicht dies nicht ganz und nur in
sample_logp :: s a -> b
.
data Model s a = Model {
sample_logp :: s a -> a
}
instance Functor (Model s) where
fmap f m = Model {
sample_logp = sample_logp'
} where sample_logp' x = (f . (sample_logp m)) x
Ist was ich versuche sogar möglich? Wenn ja, wie könnte dieser Code aktualisiert werden, um dies zu erreichen?
Es kann kein Funktor sein: 'a' ist sowohl kovariant als auch kontravariant. – zakyggaps
Danke! Gibt es in diesem Fall eine andere Klassenklasse, die das erreichen würde? – tero
Sie können [Profunctor] (http://hackage.haskell.org/package/profctors-5.2/docs/Data-Profunctor.html) überprüfen, aber die Designauswahl hängt stark davon ab, was "s" ist. – zakyggaps