Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 560fe72

Browse files
committed
Started working on ImageT.
1 parent 4be4cae commit 560fe72

File tree

1 file changed

+25
-0
lines changed

1 file changed

+25
-0
lines changed

src/lib/Graphics/Bling/Image.hs

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11

22
{-# LANGUAGE BangPatterns #-}
33
{-# LANGUAGE UnboxedTuples #-}
4+
{-# LANGUAGE GeneralizedNewtypeDeriving #-}
45

56
module Graphics.Bling.Image (
67

@@ -15,6 +16,9 @@ module Graphics.Bling.Image (
1516
imageWidth, imageHeight, sampleExtent,
1617

1718
thaw, freeze,
19+
20+
-- * The Image Transformer
21+
ImageT, runImageT, evalImageT, execImageT
1822

1923
) where
2024

@@ -299,3 +303,24 @@ rgbPixels img@(Img w h _ _ _) spw wnd = Prelude.zip xs clamped where
299303
xs = filter (\(x, y) -> x >= 0 && y >= 0 && x < w && y < h) $ coverWindow wnd
300304
os = map (\(x,y) -> (y * (imgW img)) + x) xs
301305

306+
newtype ImageT m a = ImageT { withImage :: MImage m -> m a }
307+
308+
{-
309+
instance Monad m => Monad (ImageT m) where
310+
return x = ImageT $ \_ -> return x
311+
(>>=) (ImageT i1) k = ImageT (\i2 -> k i2)
312+
313+
-}
314+
315+
runImageT :: PrimMonad m => ImageT m a -> Image -> m (a, Image)
316+
runImageT k img = do
317+
mimg <- thaw img
318+
result <- withImage k mimg
319+
(img', _) <- freeze mimg
320+
return (result, img')
321+
322+
execImageT :: PrimMonad m => ImageT m a -> Image -> m Image
323+
execImageT k i = liftM snd $ runImageT k i
324+
325+
evalImageT :: PrimMonad m => ImageT m a -> Image -> m a
326+
evalImageT k i = liftM fst $ runImageT k i

0 commit comments

Comments
 (0)