Я пытаюсь научиться использовать трубы вместе с attoparsec, следуя руководству https://hackage.haskell.org/package/pipes-attoparsec-0.1.0.1/docs/Control-Proxy-Attoparsec-Tutorial.html. Но я не смог импортировать Control.Proxy.Trans.Either. В каком lib находится этот модуль?не может импортировать Control.Proxy.Trans.Either
1
A
ответ
1
Вы используете старую версию pipes-attoparsec
, соответствующую старой версии pipes
. В последних версиях что-то вроде первого примера будет написано без трубы. Мы использовали бы функцию parsed
, которая просто применяет парсер до тех пор, пока не сработает, потоковая передача хороших анализов по мере их поступления.
{-# 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"
Тогда мы видим
-- >>> 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"
Другой принцип действия pipes-attoparsec
определяется только parse
. Это преобразует парсер attoparsec в синтаксический анализатор StateT
для анализа исходного сегмента производителя, который соответствует синтаксическому анализатору. Вы можете прочитать о них здесь http://www.haskellforall.com/2014/02/pipes-parse-30-lens-based-parsing.html
Смежные вопросы
- 1. не может импортировать google.appengine.api
- 2. не может импортировать com.google.android.maps.MapView
- 3. не может импортировать scipy.signal.convolve2d
- 4. не может импортировать is_secure_transport
- 5. не может импортировать VisualRecognitionV3
- 6. PyQt4 не может импортировать QtGui, но может импортировать QtCore
- 7. не может импортировать имя Shrinkage
- 8. Python не может импортировать фигурные
- 9. Python не может импортировать DataFrame
- 10. Python не может импортировать пакет
- 11. Haskell не может импортировать GHC.SrcLoc
- 12. sublimeREPL не может импортировать _ctypes
- 13. Python: не может импортировать JSONDecodeError
- 14. не может импортировать модуль deepcopy
- 15. ImportError: не может импортировать имя
- 16. Сельдерей не может импортировать Графики
- 17. не может импортировать имя TEMPLATE_CONTEXT_PROCESSORS
- 18. не может импортировать имя SharePointSite
- 19. Android: не может импортировать org.apache.harmony.xml.ExpatReader
- 20. не может импортировать форматы имен
- 21. Ткань не может импортировать paramiko
- 22. Java-не может импортировать java.util.function
- 23. не может импортировать Имя LOOKUP_SEP
- 24. не может импортировать имя format_html_join
- 25. Python не может импортировать libsvm
- 26. C не может импортировать ничего
- 27. не может импортировать название «Контакт»
- 28. Django не может импортировать имя
- 29. «не может импортировать имя SparkSession»
- 30. pip gmane не может импортировать
Спасибо, что нашли время, отвечая на мой вопрос. Похоже, что трубы-аттопарсец в последнее время сильно изменились. Учебник, на который я ссылался, абсолютно бесполезен и даже отвлекает. – user2812201