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