2017-04-24 1 views
1

Im purescript-free Paket gibt es ein Codebeispiel dieses Interpreter definieren:einen Dolmetscher für den freien Monade definieren

teletypeN :: forall eff. NaturalTransformation TeletypeF (Eff (console :: CONSOLE | eff)) 
teletypeN (PutStrLn s a) = const a <$> log s 
teletypeN (GetLine k) = pure (k "fake input") 

Wie kann ich definieren und einen anderen Interpreter ausgeführt, wo der Rückgabetyp Array Int oder State String Int ist?

Antwort

3

Sie können nicht auf einen bestimmten Wert interpretieren, da die Interpreter als natürliche Transformationen bereitgestellt werden - forall a. f a -> g a. Die a kann hier nicht von der Funktion "berührt" werden, die die Interpretation ausführt.

könnten Sie zu Array oder State String, interpretieren aber die a wird immer durch die Struktur bestimmt werden Sie zu interpretieren. Wenn Sie wissen, dass Sie nur Free MyAlgebra Int -> Array Int interpretieren wollen, dann wird das alles trotzdem funktionieren.

+0

Wie würden Sie einen Interpreter schreiben, der die Anzahl der Elemente zählt? 'pure 0' kann für kein' a' ausgedrückt werden. – z1naOK9nu8iY5A

+2

Interpretieren mit 'Writer (Sum Int)'. –

+1

Danke. Ich denke, du meinst "Writer (Additive Int)". – z1naOK9nu8iY5A

Verwandte Themen