nicht importieren Ich versuche zu lernen, wie Rohre zusammen mit Attoparsec zu verwenden, indem Sie dem Lernprogramm https://hackage.haskell.org/package/pipes-attoparsec-0.1.0.1/docs/Control-Proxy-Attoparsec-Tutorial.html folgen. Aber ich konnte Control.Proxy.Trans.Either nicht importieren. In welcher Bibliothek befindet sich dieses Modul?kann Control.Proxy.Trans.Either
1
A
Antwort
1
Sie treffen auf eine alte Version von pipes-attoparsec
, die einer alten Version von pipes
entspricht. Bei neueren Versionen würde etwas wie das erste Beispiel ohne eine Pipe geschrieben werden. Wir würden die parsed
-Funktion verwenden, die einen Parser wiederholt anwendet, bis sie fehlschlägt und gute Parsing-Daten strömen.
{-# LANGUAGE OverloadedStrings #-}
import Pipes
import qualified Pipes.Prelude as P
import Pipes.Attoparsec
import Data.Attoparsec.Text
import Data.Text (Text)
data Name = Name Text deriving (Show)
hello :: Parser Name
hello = fmap Name $ "Hello " *> takeWhile1 (/='.') <* "."
helloparses :: Monad m => Producer Text m r -> Producer Name m (Either (ParsingError, Producer Text m r) r)
helloparses = parsed hello
process txt = do
e <- runEffect $ helloparses txt >-> P.print
case e of
Left (err,rest) -> print err >> runEffect (rest >-> P.print)
Right() -> return()
input1, input2 :: Monad m => Producer Text m()
input1 = each
[ "Hello Kate."
, "Hello Mary.Hello Jef"
, "f."
, "Hel"
, "lo Tom."
]
input2 = input1 >> yield "garbage"
Dann sehen wir
-- >>> process input1
-- Name "Kate"
-- Name "Mary"
-- Name "Jeff"
-- Name "Tom"
-- >>> process input2
-- Name "Kate"
-- Name "Mary"
-- Name "Jeff"
-- Name "Tom"
-- ParsingError {peContexts = [], peMessage = "string"}
-- "garbage"
Das andere Prinzip Funktion pipes-attoparsec
definiert ist nur parse
. Dies konvertiert einen Attoparsec-Parser in einen Pipe-Parser, um ein Anfangssegment eines Produzenten zu parsen, der mit dem Parser übereinstimmt. Sie können über sie hier lesen http://www.haskellforall.com/2014/02/pipes-parse-30-lens-based-parsing.html
Verwandte Themen
- 1. Kann
- 2. Was kann/kann fälschen: tun?
- 3. kann nicht, kann nicht Symbolentwurf
- 4. Kann RealmSwift importieren, kann nicht instanziiert werden
- 5. Kann UItouch
- 6. kann nicht
- 7. kann nicht
- 8. Kann TypeScript
- 9. kann nicht
- 10. Kann nicht
- 11. kann nicht
- 12. kann nicht
- 13. Wie kann
- 14. wie kann
- 15. Kann nicht
- 16. Kann System.Runtime.Remoting.ObjectHandle
- 17. kann nicht
- 18. kann nicht
- 19. kann nicht
- 20. kann nicht
- 21. Kann Annotationsparameter
- 22. kann nicht
- 23. Wie kann
- 24. kann nicht
- 25. Kann QTimer
- 26. Kann nicht
- 27. kann nicht
- 28. Kann 28,0
- 29. kann nicht
- 30. kann nicht
Vielen Dank für Ihre Zeit nehmen Sie meine Frage zu beantworten. Es sieht so aus, als ob die Pipes-attoparsec in letzter Zeit dramatische Veränderungen erfahren hat. Das Tutorial, das ich genannt habe, ist völlig nutzlos und sogar störend. – user2812201