2010-06-01 2 views
3

화살표 언어 확장을 사용하는 Yampa FRP 라이브러리와 함께 Haskell을 사용하고 있습니다.화살표 구문으로 Haskell/Yampa의 간단한 putStrLn

어떻게 SF에서 간단한 putStrLn을 할 수 있습니까? 표현은 화살표 (물론) 무관하지에 대해

mySF = proc x -> do 
    y <- identity -< x*x 
    putStrLn "Hello World!" ++ show y 
    returnA -< y 

화살표 구문은 불평하지만, 심지어 화살표로 내가하는 동안 나는 단지 Yampa 주변에 조금 해본 적이

output <- identity -< putStrLn "Hello World!" 
+0

비슷한 질문 : http://stackoverflow.com/questions/3255334/debug-output-of-game-objects-in-haskell-yampa-and-hood –

답변

6

더 출력을 얻을 FRP 논문을 통해 작업 할 수는 있지만 제 이해에서는 Yampa에서 IO과 어떻게 일하는지 전혀 알 수 없습니다. 대신 을 reactimate 함수로 "애니메이트"합니다.이 함수는 두 번째 인수로 b -> IO() 유형의 함수를 사용합니다. 이 함수는 프로그램이 수행하는 다른 종류의 렌더링과 함께 putStrLn 같은 것이 생깁니다.

"Yampa Arcade" 논문의 "신호 기능 활성화"섹션에서는 reactimate의 작동 원리에 대해 설명합니다.

+0

그래서 난 모든 메시지 및 인쇄를 수집해야 "actuate :: ... IO()"에있는 그들? 출력/디버그 메시지를 만들 수있는 다른 방법이 없습니까? 이것은 매우 어려운 디버깅 소리가 난다. – user341228

+3

@sisif : 예전의 "printf debugging"을 원한다면 Debug_Trace가 그 것이다. "실제"출력의 경우, FRP 라이브러리의 전체 아이디어는 시간에 따라 변하는 대화 형 논리를 IO 부작용과 분리하는 것입니다. –

5

다음은 Yampa의 전체 Hello World 예제입니다.

{-# LANGUAGE Arrows #-} 

import FRP.Yampa 

main = reactimate initialize input output process 
initialize = return "Hello World!" 
input _  = return (0.0, Nothing) 
output _ x = putStrLn x >> return True 
process  = identity