Sequenzierungsbindung mit reinen Funktionen

8

Ich finde oft, dass ich reguläre Funktionen in eine "gebundene" Sequenz einfügen möchte. Wie in diesem erfundenen Beispiel:

%Vor%

Ich muss die Liftfunktion lift :: (a -> b) -> a -> m b definieren, damit dies funktioniert. Das Problem ist, dass ich keine solche Funktion kenne und Hoogle scheint das auch nicht zu sein. Ich finde das merkwürdig, da das für mich total Sinn macht.

Nun, es gibt wahrscheinlich andere Möglichkeiten, dies zu erreichen, aber ich mag die Art und Weise, wie ich mit Point-Free Style Code die Linie in einem Durchgang scannen kann, um herauszufinden, was passiert.

%Vor%

Meine Frage läuft darauf hinaus: Fehle ich etwas oder wie kommt es, dass es keine Funktion wie Heben gibt? Meine Erfahrung in Haskell ist immer noch sehr begrenzt, also gehe ich davon aus, dass die meisten Menschen das auf andere Weise lösen. Kann mir jemand den idiomatischen Weg erklären, dies zu lösen?

    
Magnus Kronqvist 15.03.2012, 12:41
quelle

2 Antworten

18

Es gibt drei idiomatische Möglichkeiten.

  1. Verwenden Sie keine Bindung; Verwenden Sie stattdessen den ersten Treffer Ihrer Hoogle-Suche:

    %Vor%

    Es gibt eine Vielzahl alternativer Schreibweisen von liftM , z. B. fmap oder (<$>) .

  2. Fügen Sie die von Ihnen definierte Funktion lift ein:

    %Vor%
  3. Verwenden Sie die Monad-Gesetze, um die letzten beiden Bindungen in Option 2 zu fusionieren:

    %Vor%
Daniel Wagner 15.03.2012, 12:51
quelle
3

Verwenden Sie die Functor Instanz in solchen Fällen:

%Vor%     
Ionuț G. Stan 15.03.2012 12:50
quelle

Tags und Links