• Keine Ergebnisse gefunden

Fortgeschrittene Techniken der Funktionalen Programmierung Vorlesung vom 10.11.09: Monadentransformer

N/A
N/A
Protected

Academic year: 2022

Aktie "Fortgeschrittene Techniken der Funktionalen Programmierung Vorlesung vom 10.11.09: Monadentransformer"

Copied!
10
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

Fortgeschrittene Techniken der Funktionalen Programmierung Vorlesung vom 10.11.09:

Monadentransformer

Christoph L¨ uth, Dennis Walter

Universit¨at Bremen

Wintersemester 2009/10

(2)

Heute gibt’s:

I

Eine Monade ist gut, mehrere Monaden sind besser

I

Kombination von Monaden

I

Monadentransformer

(3)

Fahrplan

I

Teil I: Monaden und fortgeschrittene Typen

I Einf¨uhrung, Wiederholung

I Zust¨ande, Zustands¨uberg¨ange undIO

I Reader/Writer, Nichtdeterminismus, Ausnahmen

I Monadentransformer

I

Teil II: Fortgeschrittene Datenstrukturen

I

Teil III: Nebenl¨ aufigkeit

I

Teil IV: The Future of Programming

(4)

Kombination von Monaden: Das Problem

I

Gegeben zwei Monaden:

c l a s s Monad m1 where . . . c l a s s Monad m2 where . . .

I

Es gelten weder

i n s t a n c e Monad (m1 (m2 a ) ) i n s t a n c e Monad (m2 (m1 a ) )

I

Problem: Monadengesetze gelten nicht.

(5)

Monadentransformer

I

Monadentransformer:

I Erweiterbare Monade

I Monade mitLoch

newtype M a = . . .

i n s t a n c e Monad M where f

=

g = . . .

r e t u r n x = . . .

newtype M m a = . . .

i n s t a n c e Monad m⇒ Monad M m where f

=

g = . . .

r e t u r n x = . . .

(6)

Monadentransformer: Beispiele

1.

Beispiel: Zustandsmonadentransformer

type S t a t e T s m a = s

m ( s , a )

I Zustandsbasierte Berechnungenin einer anderen Monadem

I StateT s Identity ist Zustandsmonade

2.

Beispiel: Fehlermonadentransformer

type E r r o r T e m a = m ( E i t h e r e a )

I Fehlerbehaftete Berechnungenin einer anderen Monadem

I ErrorT e Identity ist Fehlermonade

(7)

Reihenfolge beachten!

I

Kombination von

State

und

Error

I

Erst Zustand, dann Fehler:

type E r r o r S t a t e s a =

E r r o r T ( S t a t e T s I d ) = E i t h e r S t r i n g ( s

( s , a ) )

I Berechungm :: ErrorState s a: Fehler oder zustandsbehaftet

I E.g. Fehler in Haskell

I

Erst Fehler, dann Zustand:

type S t a t e E r r o r s a = s

( s , E i t h e r S t r i n g a )

I Berechungm :: StateError s a: Immer zustandsbehaftet, Resultat Fehler oder normal

(8)

Standardtransformer

Standard-Monade Transformer Standard-Typ Transformierter Typ

Error ErrorT Either e a m (Either e a)

State StateT s

(a, s) s

m (a,s)

Reader ReaderT r

a r

m a

Writer WriterT (a,w) m (a,w)

Cont ContT (a

r)

r (a

m r)

m r

Quelle:http://www.haskell.org/all˙about˙monads/

(9)

Fallbeispiel: ein Modularer Interpreter

I

Ziel: Interpreter f¨ ur eine einfache imperative Sprache

I

Modularer Aufbau:

1. Nur Zustand 2. Ausgabe 3. Eingabe

4. Fehler und Fehlerbehandlung

(10)

Zusammenfassung

I

Warum Monaden kombinieren?

I Typ definiertEffekt

I E.g.WriterT— nur Logging, kein Zustand

I Pragmatisch: dieIO-Monade (imperativ)

I

Vorteile Monadentransfomer:

I Erlauben modulare Kombination von Monaden

I Standard-B¨ucherei (Monad Template Library) bietet Standard-Monaden als praktischen Bausatz

I

Nachteile Monadentransformer:

I F¨ur neue TransformerKombinationmitallenanderen zu bedenken!

I Nichtkompositional

Referenzen

ÄHNLICHE DOKUMENTE

Im kritischen Abschnitt schlafengehen, wenn Bedingung nicht erf¨ullt (Lock freigeben!).. Andere Threads machen Bedingung wahr und melden

I Funktionale Sprachen behandeln Zukunftsthemen heute.. Standard ML);. I Continuations (Auswertungskontext

Fortgeschrittene Techniken der Funktionalen Programmierung Vorlesung vom 27.10.09:.. Monads — The

Fortgeschrittene Techniken der Funktionalen Programmierung Vorlesung vom 03.11.09:.. Mehr ¨

Fortgeschrittene Techniken der Funktionalen Programmierung Vorlesung vom 17.11.09:..

I Beispiel f¨ur induktive, aber nicht freie Datenstruktur. I Kompakte Darstellung, effiziente

I Gängige Sprachen (Java, C/C++, Ada) erschweren weitere Abstraktion: Syntaxerweiterungen, Konzepte höherer Ordnung. I Imperative Ausrichtung der Programmiersprache vs. mit Lua in

Fortgeschrittene Techniken der Funktionalen Programmierung Vorlesung vom 26.01.10:.. The Next Big Thing — Scala