Move identity monad to a separate module and add a boxing monad
authorRoman Leshchinskiy <rl@cse.unsw.edu.au>
Thu, 10 Sep 2009 10:15:20 +0000 (10:15 +0000)
committerRoman Leshchinskiy <rl@cse.unsw.edu.au>
Thu, 10 Sep 2009 10:15:20 +0000 (10:15 +0000)
Data/Vector/Fusion/Stream.hs
Data/Vector/Fusion/Util.hs [new file with mode: 0644]
vector.cabal

index b10b78c..e0b0e33 100644 (file)
@@ -16,7 +16,7 @@
 
 module Data.Vector.Fusion.Stream (
   -- * Types
-  Step(..), Stream, MStream, Id(..),
+  Step(..), Stream, MStream,
 
   -- * Size hints
   size, sized,
@@ -65,6 +65,7 @@ module Data.Vector.Fusion.Stream (
 ) where
 
 import Data.Vector.Fusion.Stream.Size
+import Data.Vector.Fusion.Util
 import Data.Vector.Fusion.Stream.Monadic ( Step(..) )
 import qualified Data.Vector.Fusion.Stream.Monadic as M
 
@@ -80,17 +81,6 @@ import Prelude hiding ( length, null,
                         and, or,
                         mapM_ )
 
-
--- | Identity monad
-newtype Id a = Id { unId :: a }
-
-instance Functor Id where
-  fmap f (Id x) = Id (f x)
-
-instance Monad Id where
-  return     = Id
-  Id x >>= f = f x
-
 -- | The type of pure streams 
 type Stream = M.Stream Id
 
diff --git a/Data/Vector/Fusion/Util.hs b/Data/Vector/Fusion/Util.hs
new file mode 100644 (file)
index 0000000..1e46009
--- /dev/null
@@ -0,0 +1,35 @@
+-- |
+-- Module      : Data.Vector.Fusion.Util
+-- Copyright   : (c) Roman Leshchinskiy 2009
+-- License     : BSD-style
+--
+-- Maintainer  : Roman Leshchinskiy <rl@cse.unsw.edu.au>
+-- Stability   : experimental
+-- Portability : portable
+-- 
+-- Fusion-related utility types
+--
+
+module Data.Vector.Fusion.Util ( Id(..), Box(..) )
+where
+
+-- | Identity monad
+newtype Id a = Id { unId :: a }
+
+instance Functor Id where
+  fmap f (Id x) = Id (f x)
+
+instance Monad Id where
+  return     = Id
+  Id x >>= f = f x
+
+-- | Box monad
+data Box a = Box { unBox :: a }
+
+instance Functor Box where
+  fmap f (Box x) = Box (f x)
+
+instance Monad Box where
+  return      = Box
+  Box x >>= f = f x
+
index 69f103f..e3fd091 100644 (file)
@@ -26,6 +26,7 @@ Flag EnableAssertions
 Library
   Extensions: CPP
   Exposed-Modules:
+        Data.Vector.Fusion.Util
         Data.Vector.Fusion.Stream.Size
         Data.Vector.Fusion.Stream.Monadic
         Data.Vector.Fusion.Stream