wumpus-basic-0.3.0: src/Wumpus/Basic/Monads/Drawing.hs
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE FlexibleContexts #-}
{-# OPTIONS -Wall #-}
--------------------------------------------------------------------------------
-- |
-- Module : Wumpus.Basic.Monads.Drawing
-- Copyright : (c) Stephen Tetley 2010
-- License : BSD3
--
-- Maintainer : stephen.tetley@gmail.com
-- Stability : unstable
-- Portability : GHC
--
-- Drawing operations
--
--------------------------------------------------------------------------------
module Wumpus.Basic.Monads.Drawing
(
MGraphicF
, traceG
, node
, at
) where
import Wumpus.Basic.Graphic
import Wumpus.Basic.Monads.TraceClass
import Wumpus.Basic.Monads.TurtleClass
import Wumpus.Core -- package: wumpus-core
type MGraphicF m u a = Point2 u -> m a
traceG :: (Monad m, TraceM m (Primitive u)) => GraphicF u -> MGraphicF m u ()
traceG fn = \pt -> trace (fn pt)
-- MGraphic functions will have to trace themselves...
node :: (TraceM m (Primitive u), TurtleScaleM m u, Num u)
=> MGraphicF m u a -> m a
node mgF = getPos >>= \pt -> mgF pt
infixr 6 `at`
at :: (Num u, TraceM m (Primitive u), TurtleScaleM m u)
=> MGraphicF m u a -> (Int,Int) -> m a
at mgF coord = scaleCoord coord >>= \pt -> mgF pt