Dato un differentiable type, sappiamo che its Zipper
is a Comonad
. In risposta a questo, Dan Burton ha chiesto: "Se la derivazione fa una comonade, vuol dire che l'integrazione fa una monade? O è una sciocchezza?". Mi piacerebbe dare a questa domanda un significato specifico. Se un tipo è differenziabile, è necessariamente una monade? Una formulazione della domanda potrebbe essere quella di chiedere, date le seguenti definizioniSono tutti tipi differenziabili Monadi
data Zipper t a = Zipper { diff :: D t a, here :: a }
deriving instance Diff t => Functor (Zipper t)
class (Functor t, Functor (D t)) => Diff t where
type D t :: * -> *
up :: Zipper t a -> t a
down :: t a -> t (Zipper t a)
possiamo scrivere funzioni con le firme simili a
return :: (Diff t) => a -> t a
(>>=) :: (Diff t) => t a -> (a -> t b) -> t b
obbedire alla Monad laws.
Nelle risposte alle domande collegate, c'erano due approcci di successo a un problema simile di derivazione delle istanze Comonad
per lo Zipper
. Il primo approccio è stato expand the Diff
class to include the dual of >>=
and use partial differentiation. Il secondo approccio era a require that the type be twice or infinitely differentiable.
Quindi, questo dimostra che "essere differenziabili" non garantisce che qualcosa possa anche essere "il risultato dell'integrazione". Risponde alla domanda di Cirdec, ma non risponde in modo particolare al mio. (Non sto chiedendo una risposta, semplicemente osservando.) La derivata di zero è zero, ma l'integrale indefinito di zero non è necessariamente zero. È una costante arbitraria. –
@DanBurton Se pensate che la 'Zipper' abbia un' D t' come derivata, 'D t' è la derivata di' t' che conduce a un'istanza 'Comonad' per' Zipper t'. L'integrazione è l'inverso della differenziazione, quindi 't' è l'integrale/di' D t'. Avere una derivata equivale a essere un integrale. Ecco perché ho formulato la domanda nel modo in cui ho fatto: 't' è l'integrale di' D t' che conduce a un'istanza di 'Monad' per un' t'? – Cirdec
@DanBurton Possiamo fare un'istanza 'Monad' per qualcosa di opposto, vedere la mia nuova risposta. – Cirdec