Eine abgeleitete Instanz von MonadTrans für newtype kann nicht erstellt werden

Kakaji

Ich habe die folgende Newtype-Deklaration. Es wird ein Monad-Stack-Transformator umwickelt, der einige Standard-MTL-Monaden wie Reader und Except stapelt.

newtype TrxDbFileBased f a = TrxDbFileBased {
        unTrxDbFileBased :: ExceptT TrxDbError (ReaderT TrxDbFileBasedEnv f) a
    } deriving (
        Functor
    ,   Applicative
    ,   Monad
    ,   MonadError TrxDbError
    ,   MonadReader TrxDbFileBasedEnv
    ,   MonadIO
    ,   MonadTrans
    )

data TrxDbFileBasedEnv = TrxDbFileBasedEnv {
        workingDirectory :: FilePath    
    } deriving (Show)

data TrxDbError = TrxDbErrorIO TrxDbFileBasedEnv IOException
                | TrxDbErrorStr TrxDbFileBasedEnv String 
                deriving (Show)

Ich möchte, dass dieser Newtype eine Instanz von ist MonadTrans, erhalte jedoch den folgenden Fehler.

    • Can't make a derived instance of ‘MonadTrans TrxDbFileBased’
        (even with cunning GeneralizedNewtypeDeriving):
        cannot eta-reduce the representation type enough
    • In the newtype declaration for ‘TrxDbFileBased’
   |        
31 |     ,   MonadTrans
   |         ^^^^^^^^^^

Ich verstehe nicht, warum MonadTransnicht abgeleitet werden kann, da der zugrunde liegende Typ ExceptTeine Instanz von ist MonadTrans.

Fjodor Soikin

Das Problem ist, dass, wenn diese Ableitung funktioniert, Ihre Instanz von MonadTransden Funktor transformieren würde f, während die Instanz für ExceptT, von der Sie erwarten, dass sie als Basis der Ableitung verwendet wird, die Monade transformiert ReaderT TrxDbFileBasedEnv f.

Diese sind nicht repräsentativ äquivalent, GeneralizedNewtypeDerivingkönnen Ihnen also hier nicht helfen.

Hier ist eine andere Möglichkeit, darüber nachzudenken: Versuchen Sie, die Klasse manuell zu implementieren. Wenn Sie das versuchen, werden Sie sehen, dass Ihr liftWille wie folgt definiert werden muss:

lift = TrxDbFileBased . lift . lift

Das heißt, zunächst Hebt fin ReaderT, dann Anheben ReaderTin ExceptTund dann alles in Einwickeln TrxDbFileBased. GND erwartet jedoch nichts weiter als das No-Op-Wrapping, was bedeutet, dass das Methodenwörterbuch direkt wiederverwendet wird, da die Typen repräsentativ äquivalent sind. Dies ist in Ihrem Fall nicht der Fall.

Dieser Artikel stammt aus dem Internet. Bitte geben Sie beim Nachdruck die Quelle an.

Bei Verstößen wenden Sie sich bitte [email protected] Löschen.

bearbeiten am
0

Lass mich ein paar Worte sagen

0Kommentare
LoginNach der Teilnahme an der Überprüfung

Verwandte Artikel

Eine abgeleitete Instanz von Num kann nicht erstellt werden

JsonMappingException: Instanz von kann nicht erstellt werden

Instanz von - Jackson kann nicht erstellt werden

Instanz von AndroidViewModel kann nicht erstellt werden

Stylesheet für eine von QWidget abgeleitete Klasse in qt kann nicht festgelegt werden

Android - Fehler "Instanz von kann nicht erstellt werden (obwohl mindestens eine Erstellung vorhanden ist)" mit Retrofit

Es kann keine abgeleitete Instanz des Monadentransformators erstellt werden

Eine Spot-Instanz-VM kann in Azure nicht erstellt werden

FxCopAnalyzers: Eine Instanz des Analysators kann nicht erstellt werden

Eine Instanz einer Schnittstelle kann nicht erstellt werden. IPagedList

Wie kann eine Instanz von QNetworkAccessManager erstellt werden?

Instanz von MainViewModel kann nicht mit Hilt erstellt werden

Instanz von ViewModel in Android kann nicht erstellt werden

Instanz von JwtClaimsBuilder in Quarkus-Anwendung kann nicht erstellt werden

Wie kann ich automatisch eine typisierbare Instanz für von DataKinds abgeleitete Typen ableiten?

Warum kann "hasOwnProperty" nicht für eine Instanz von HTMLInputElement verwendet werden?

AWS Lex empfängt eine ungültige Antwort von der Lambda-Funktion – Instanz von IntentResponse kann nicht erstellt werden

Aktivität kann nicht geöffnet werden: Instanz von Android View Model kann nicht erstellt werden

Gcloud-Instanz kann nicht erstellt werden

Instanz für Cropperjs kann nicht mit React-Cropper erstellt werden

Automapper: Instanz des abstrakten Typs für Sammlungen kann nicht erstellt werden

Instanz für Viewcontroller in anderen Viewcontrollern in Swift kann nicht erstellt werden

GET-Anforderung kann nicht ausgeführt werden, indem die Abrufmethode für eine Instanz von HttpClient in Aurelia aufgerufen wird

Es kann keine Instanz von Attribut für einen Komponententest erstellt werden

Konnte JSON nicht lesen: Instanz von `java.util.LinkedHashMap` kann nicht erstellt werden

Setup von vue-test-utils mit TypeError: Die Eigenschaft '_Ctor' kann nicht für eine Zeichenfolge erstellt werden

Warnung: In SceneView (erstellt von Pager) kann keine Aktualisierung des Reaktionsstatus für eine nicht gemountete Komponente durchgeführt werden.

Eine Instanz des Analysators Microsoft.AspNetCore.Mvc.Analyzers.AvoidHtmlPartialAnalyzer kann nicht aus C: \ erstellt werden

C # Source Generator - Warnung CS8032: Eine Instanz des Analysators kann nicht erstellt werden

TOP Liste

  1. 1

    So legen Sie mit dem Interface Builder unterschiedliche führende Speicherplätze für unterschiedliche Geräte fest

  2. 2

    Fügen Sie eine weitere Schaltfläche zu gwt Suggest Box hinzu

  3. 3

    Wie konvertiere ich einen Vektor von Bytes (u8) in eine Zeichenfolge?

  4. 4

    Wie kann ich in SCSS mehrere Klassen zu einer einzigen kombinieren?

  5. 5

    Wie konvertiert man einen Datenrahmen im langen Format in eine Liste mit einem geeigneten Format?

  6. 6

    Speichern Sie ein MPAndroidChart-Diagramm in einem Bild, ohne es in einer Aktivität anzuzeigen

  7. 7

    Gruppieren Sie Datenrahmenspalten nach ihrem Datum (die Spaltentitel enthalten) und fassen Sie die Instanzen von Einsen und Nullen in R . zusammen

  8. 8

    Tomcat - Leiten Sie den alten Kontextstamm zum neuen Kontextstamm um

  9. 9

    Eclipse Oxygen - Projekte verschwinden

  10. 10

    Wie wählt man Unterschiede mit drei Tabellen aus?

  11. 11

    Tic Tac Toe-Spiel im React-Reset-Button funktioniert nicht

  12. 12

    So berechnen Sie die Verfügbarkeit von Anwendungen (SLA)

  13. 13

    ElasticSearch BulkShardRequest ist aufgrund von org.elasticsearch.common.util.concurrent.EsThreadPoolExecutor fehlgeschlagen

  14. 14

    Wie kann ich den Kaskadenmodus global einstellen?

  15. 15

    Python: Spalten mit demselben Namen zusammenführen, wobei der Mindestwert beibehalten wird

  16. 16

    So erhalten Sie eine gleichmäßige Höhe für alle Eingabefelder

  17. 17

    Wie erstelle ich einen neuen übergeordneten Knoten außerhalb der .ref (/ path) in der Firebase-Echtzeitdatenbank mithilfe von Cloud-Funktionen (Typescript)?

  18. 18

    Was ist schneller: SUM über NULL oder über 0?

  19. 19

    Wie kann ich eine verschachtelte Schleife mit lapply in R ersetzen?

  20. 20

    Kann ich ein Tkinter-Canvas erstellen, das mehrere Zeilen in einem Text-Widget umfasst?

  21. 21

    Ärgerliches Problem mit yaml, das ich nicht lösen kann

heißlabel

Archiv