Wie können wir beweisen, dass the continuation monad keine gültige Instanz von MonadFix
hat?Warum kann es keine Instanz von MonadFix für die Continuation Monade geben?
14
A
Antwort
4
Nun, eigentlich ist es nicht so, dass es keine MonadFix
Instanz geben kann, nur dass der Typ der Bibliothek etwas zu eingeschränkt ist. Wenn Sie ContT
über alle möglichen r
s definieren, dann nicht nur geworden MonadFix
möglich, aber alle Instanzen bis zu Monad
verlangen nichts von dem zugrunde liegenden Funktors:
newtype ContT m a = ContT { runContT :: forall r. (a -> m r) -> m r }
instance Functor (ContT m) where
fmap f (ContT k) = ContT (\kb -> k (kb . f))
instance Monad (ContT m) where
return a = ContT ($a)
join (ContT kk) = ContT (\ka -> kk (\(ContT k) -> k ka))
instance MonadFix m => MonadFix (ContT m) where
mfix f = ContT (\ka -> mfixing (\a -> runContT (f a) ka<&>(,a)))
where mfixing f = fst <$> mfix (\ ~(_,a) -> f a)
Verwandte Themen
- 1. MonadFix Instanz für Put
- 2. Gibt es eine Instanz von Monad, aber nicht von MonadFix?
- 3. MonadFix Beispiel für []
- 4. MonadError-Instanz für eine freie Monade
- 5. Es ist keine Monade, aber was ist es?
- 6. Keine Instanz für die Verwendung von 'nächsten'
- 7. Wie index-core style indexed continuation monad
- 8. Kann ich die Verwendung von UndecidableInstances in dieser Show-Instanz für eine kostenlose Monade eliminieren?
- 9. Python - Warum erstellt es keine neue Instanz von Objekt?
- 10. Einen benutzerdefinierten Monade-Transformer zu einer Instanz von MonadError machen
- 11. Warum ist die Zustands-Monade nicht verfahrbar?
- 12. Continuation monadisch "Schnittstelle"
- 13. Keine Idee warum: Die ResourceConfig-Instanz enthält keine Stammressourcenklassen
- 14. Warum wird es in Java 7 keine nativen Eigenschaften geben?
- 15. MonadFix in strenger Sprache
- 16. Warum kann es keine Klassen innerhalb von Methoden in Ruby geben?
- 17. kann keine Service-Instanz von $ injector.get() erhalten
- 18. Keine Instanz für (Floating Int)
- 19. Warum geben document.getElementsBy__-Methoden keine HTMLCollection zurück?
- 20. "Kann keine Instanz von WindowsPage erstellen"
- 21. Wie geben Sie die Instanz von dem eine Funktion
- 22. Verwenden Sie die Liste Monade innerhalb Monade Transformator Klassen?
- 23. Ich kann keine Instanz erstellen
- 24. Warum gibt es keine Testinstrumentierung für BroadcastReceiver?
- 25. warum Authentifizieren geben keine in django
- 26. Warum gibt es keine Typklasse für Containertypen?
- 27. Keine Instanz für (Floating Integer) aus einer Verwendung von '**'?
- 28. MonadTransControl Beispiel für eine benutzerdefinierte Monade
- 29. Was sind Haskell Continuation-basierte Web-Framework?
- 30. Warum bekomme ich JSF (primefaces) Kann keine neue Collection-Instanz für den Typ java.util.Arrays erstellen $ ArrayList
Es sieht aus wie Ihre Art eigentlich die eingeschränkteren ist. Gibt es reale Situationen, in denen das Argument, "ContT" zu polymorph zu machen, nützliche Implementierungen blockieren würde? Wenn nicht, ist das wahrscheinlich nur eine Frage der Geschichte - "ConTT" gibt es schon lange, wahrscheinlich bevor Rang 2-Typen ein gut akzeptierter Teil von Haskell waren. – dfeuer
Das polymorphe Argument 'ContT' wird auch als'Codesity' bezeichnet. Es fehlt die Fähigkeit, 'callCC' zu definieren. –
Diese Antwort erklärt warum Ihr 'forall r. (a -> m r) -> m r '' ContT' kann nicht 'callCC' haben. http://StackOverflow.com/a/7180154/414413 – Cirdec