Я пытаюсь работать с Ubigraph в 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 ()
и получаю
Не удалось сопоставить ожидаемый тип `Control.Monad.Trans.Reader.ReaderT Убиграф IO a0 ' с фактическим типом ʻIO () ' В возвращаемом типе вызова `putStrLn ' В stmt выражения 'do': putStrLn "что-то" В выражении: делать {ясно; vs <- mapM (const newVertex) [0 .. 200]; mapM_ (setVAttr (VShape Sphere)) vs; putStrLn "что-то"; ....}
Я вижу, что тип операции подразумевается как нечто отличное от типа возвращаемого значения putStrLn, но я не уверен, как бы я переделал этот код для правильной компиляции. Могу ли я просто изменить тип возвращаемого значения функции op?
Спасибо