aboutsummaryrefslogtreecommitdiff
path: root/Graphics/Glyph/ArrayGenerator.hs
diff options
context:
space:
mode:
Diffstat (limited to 'Graphics/Glyph/ArrayGenerator.hs')
-rw-r--r--Graphics/Glyph/ArrayGenerator.hs41
1 files changed, 22 insertions, 19 deletions
diff --git a/Graphics/Glyph/ArrayGenerator.hs b/Graphics/Glyph/ArrayGenerator.hs
index 16fe41f..088ccc7 100644
--- a/Graphics/Glyph/ArrayGenerator.hs
+++ b/Graphics/Glyph/ArrayGenerator.hs
@@ -1,9 +1,9 @@
{-# LANGUAGE UndecidableInstances #-}
-module Graphics.Glyph.ArrayGenerator where
-import qualified Data.Map as M
+module Graphics.Glyph.ArrayGenerator where
import Data.Array
+import qualified Data.Map as M
import Data.Maybe
data ArrayTransaction ix val b = ArrayBuilderM_ (M.Map ix val) b
@@ -13,33 +13,36 @@ instance (Ord ix) => Functor (ArrayTransaction ix a) where
instance (Ord ix) => Applicative (ArrayTransaction ix a) where
(<*>) afn aa = do
- fn <- afn
- a <- aa
- return (fn a)
+ fn <- afn
+ a <- aa
+ return (fn a)
pure = return
instance (Ord ix) => Monad (ArrayTransaction ix a) where
- return = ArrayBuilderM_ M.empty
- (ArrayBuilderM_ map1 val) >>= f =
- ArrayBuilderM_ (map1 `M.union` map2) val2
- where (ArrayBuilderM_ map2 val2) = f val
+ return = ArrayBuilderM_ M.empty
+ (ArrayBuilderM_ map1 val) >>= f =
+ ArrayBuilderM_ (map1 `M.union` map2) val2
+ where
+ (ArrayBuilderM_ map2 val2) = f val
class HasDefault a where
- theDefault :: a
+ theDefault :: a
instance (Num a) => HasDefault a where
- theDefault = 0
-instance (HasDefault a, HasDefault b) => HasDefault (a,b) where
- theDefault = (theDefault,theDefault)
-instance (HasDefault a, HasDefault b, HasDefault c) => HasDefault (a,b,c) where
- theDefault = (theDefault,theDefault,theDefault)
+ theDefault = 0
+
+instance (HasDefault a, HasDefault b) => HasDefault (a, b) where
+ theDefault = (theDefault, theDefault)
+
+instance (HasDefault a, HasDefault b, HasDefault c) => HasDefault (a, b, c) where
+ theDefault = (theDefault, theDefault, theDefault)
writeArray :: ix -> a -> ArrayTransaction ix a ()
writeArray index' val = ArrayBuilderM_ (M.singleton index' val) ()
-buildArray :: (Ix ix) => (ix,ix) -> e -> ArrayTransaction ix e () -> Array ix e
+buildArray :: (Ix ix) => (ix, ix) -> e -> ArrayTransaction ix e () -> Array ix e
buildArray bounds' def (ArrayBuilderM_ map' _) =
- listArray bounds' [maybeLookup map' bound | bound <- range bounds']
- where maybeLookup map_ key = fromMaybe def (M.lookup key map_)
-
+ listArray bounds' [maybeLookup map' bound | bound <- range bounds']
+ where
+ maybeLookup map_ key = fromMaybe def (M.lookup key map_)