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
:
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?
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:
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.
Tags und Links haskell classy-prelude