대부분이 힌트 예제에서 나온 것입니다. 내가하고 싶은 것은 모듈과 수입 등으로 통역사를 초기화하고 어떻게 든 유지하는 것입니다. 나중에 (사용자 이벤트 등), 초기화 된 상태로 함수를 호출하고 표현을 여러 번 해석 할 수 있기를 원합니다. 그래서 코드의 --split 위치에, 위의 코드를 init에 넣고, 아래 코드는 표현식을 취하고 해석하는 새로운 함수에 넣고 싶습니다.모나드를 초기화 한 다음 하스켈에서 함수를 여러 번 사용하는 방법
module Main where
import Language.Haskell.Interpreter
import Test.SomeModule
main :: IO()
main = do r <- runInterpreter testHint
case r of
Left err -> printInterpreterError err
Right() -> putStrLn "Done."
-- Right here I want to do something like the following
-- but how do I do testInterpret thing so it uses the
-- pre-initialized interpreter?
case (testInterpret "expression one")
Left err -> printInterpreterError err
Right() -> putStrLn "Done."
case (testInterpret "expression two")
Left err -> printInterpreterError err
Right() -> putStrLn "Done."
testHint :: Interpreter()
testHint =
do
loadModules ["src/Test/SomeModule.hs"]
setImportsQ [("Prelude", Nothing), ("Test.SomeModule", Just "SM")]
say "loaded"
-- Split here, so what I want is something like this though I know
-- this doesn't make sense as is:
-- testExpr = Interpreter() -> String -> Interpreter()
-- testExpr hintmonad expr = interpret expr
let expr1 = "let p1o1 = SM.exported undefined; p1o2 = SM.exported undefined; in p1o1"
say $ "e.g. typeOf " ++ expr1
say =<< typeOf expr1
say :: String -> Interpreter()
say = liftIO . putStrLn
printInterpreterError :: InterpreterError -> IO()
printInterpreterError e = putStrLn $ "Ups... " ++ (show e)
나는 내 질문을 조금 변경하여 내가하려는 일에 대해 더 잘 보여주고있다. 나는 당신이 가고있는 곳을 보았다고 생각하지만, 나중에 그 스트림에 뭔가를 집어 넣고 어떻게 결과를 되 찾을 수 있을지 모르겠습니다. (오류인지 아닌지). – mentics
함수에 통신 채널이 있으면'go' 루프가 이벤트를 처리합니다. 대신에 (입력과 출력 모두에 대해) 명시 적 Chan 유형을 사용할 수 있습니다. –