Classy-Prelude (Kopf. Kopf)

8

Ich versuche derzeit, mehrere Projekte in classy-prelude zu konvertieren. Während das meiste Verhalten für mich ziemlich einfach scheint, gibt (head . head) mysteriöse Fehler in einer einfachen 2D-Liste.

Betrachten Sie die folgende GHCi-Sitzung:

%Vor%

Versuchen wir das mit ghci -XNoImplicitPrelude und classy-prelude :

%Vor%

Ich nehme an, dass GHC die Typen für mehrdimensionale Listen nicht korrekt auflösen kann. Kann ich irgendwie helfen, ohne auf (Prelude.head . Prelude.head) zurückzugreifen?

    
Uli Köhler 25.02.2014, 22:51
quelle

1 Antwort

10

Wie bereits in den Kommentaren erwähnt, ist das klassische Präludium Die Funktion head funktioniert nur für Traverables, für die mindestens ein Element vom Typsystem garantiert ist, damit es nicht partiell sein muss. Da alle Ihre Listen mindestens ein Element haben, können Sie einfach den nicht leeren Listentyp verwenden:

%Vor%

(Die Funktionen, die mit ml beginnen, stammen alle aus dem MinLen Modul von mono-traversable , das von classy-prelude ) erneut exportiert wird

Wenn Sie nur das Verhalten der Funktion Prelude.head möchten, können Sie unsafeHead erneut aus dem Paket mono-traversable und wird standardmäßig exportiert:

%Vor%

Es gibt auch headMay in diesem Modul, das verwendet werden kann, wenn Sie Fehler anders behandeln möchten und nicht das gesamte Programm abstürzen.

    
bennofs 26.02.2014, 00:42
quelle

Tags und Links