Estoy tratando de trabajar con Ubigraph en haskell, pero creo que mi problema es más genérico. Estoy intentando compilar:Mezcla de mónadas en Haskell
import Graphics.Ubigraph
import Control.Monad
import System.Posix.Unistd
main = do
h <- initHubigraph "http://127.0.0.1:20738/RPC2"
runHubigraph op h
op = do
clear
vs <- mapM (const newVertex) [0..200]
mapM_ (setVAttr (VShape Sphere)) vs
putStrLn "something"
let bind i = zipWithM (\a b -> newEdge (a,b)) vs (drop i vs ++ take i vs)
mapM_ bind [1..15]
mapM_ (removeVertex) vs
return()
y estoy consiguiendo
Couldn't match expected type `Control.Monad.Trans.Reader.ReaderT Ubigraph IO a0' with actual type `IO()' In the return type of a call of `putStrLn' In a stmt of a 'do' expression: putStrLn "something" In the expression: do { clear; vs <- mapM (const newVertex) [0 .. 200]; mapM_ (setVAttr (VShape Sphere)) vs; putStrLn "something"; .... }
puedo ver cómo el tipo de OP se implicó como algo diferente del tipo de retorno de putStrLn, pero no estoy seguro de cómo rediseñaré este código para compilarlo correctamente. ¿Puedo simplemente cambiar el tipo de devolución de la función op?
Gracias
increíble, que funcionó muy bien. Gracias por la rápida respuesta –