2010-06-01 5 views
3

J'utilise Haskell avec la librairie Yampa FRP qui utilise l'extension du langage fléché.simple putStrLn dans Haskell/Yampa avec la syntaxe des flèches

comment puis-je faire un putStrLn simple dans un SF?

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

la syntaxe de flèche se plaint de l'expression non bein une flèche (bien sûr), mais même avec des flèches i obtenir aucune sortie

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

question similaire: http://stackoverflow.com/questions/3255334/debug-output-of-game-objects-in-haskell-yampa-and-hood –

Répondre

6

Je n'ai joué avec Yampa un peu en essayant pour travailler à travers les documents FRP, mais dans ma compréhension ce n'est tout simplement pas du tout comment vous travaillez avec IO à Yampa. Au lieu de cela, vous "animez" un SF a b avec la fonction reactimate, qui prend comme deuxième argument une fonction de type b -> IO(). Cette fonction est où les choses comme votre putStrLn vivraient, avec tous les autres types de rendu que le programme fait.

La section "Animating Signal Functions" du document "Yampa Arcade" donne une bonne explication du fonctionnement de reactimate.

+0

donc je dois recueillir tous les messages et imprimer les dans "actuate :: ... IO()"? n'existe-t-il aucun autre moyen de créer des messages de sortie/débogage? cela semble très difficile à déboguer ... – user341228

+3

@sisif: Si vous voulez simplement le "débogage printf" à l'ancienne, c'est à ça que sert 'Debug.Trace'. Pour une sortie «réelle», l'idée générale des bibliothèques de FRP est de séparer la logique interactive et variable dans le temps des effets secondaires des E/S. –

5

Voici un exemple complet de Hello World pour Yampa.

{-# 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
Questions connexes