LTree 0.0 → 0.1
raw patch · 2 files changed
+37/−2 lines, 2 filesPVP ok
version bump matches the API change (PVP)
API changes (from Hackage documentation)
+ Control.Trees.LTreeT: TreeT :: (m (Tree a)) -> TreeT m a
+ Control.Trees.LTreeT: data TreeT m a
+ Control.Trees.LTreeT: instance Applicative m => Applicative (TreeT m)
+ Control.Trees.LTreeT: instance Functor m => Functor (TreeT m)
+ Control.Trees.LTreeT: instance Monad m => Monad (TreeT m)
+ Control.Trees.LTreeT: instance MonadIO m => MonadIO (TreeT m)
+ Control.Trees.LTreeT: instance MonadTrans TreeT
Files
- Control/Trees/LTreeT.hs +35/−0
- LTree.cabal +2/−2
+ Control/Trees/LTreeT.hs view
@@ -0,0 +1,35 @@+module Control.Trees.LTreeT(TreeT(..)) where++import Control.Monad.Trans.Class+import Control.Monad.IO.Class+import Control.Monad+import Control.Applicative++import Data.Trees.LTree+data TreeT m a = TreeT (m (Tree a))+runTreeT (TreeT m) = m+treeT0 = TreeT+treeT1 f = treeT0 . f . runTreeT+treeT2 f = treeT1 . f . runTreeT++instance Monad m => Monad (TreeT m) where+ return c = TreeT $ return $ Leaf c+ tmb_v >>= f = TreeT $ runTreeT tmb_v >>= onone f+ where onone f (Node b_ets) = do+ ets_ <- mapM (onone f) b_ets+ return $ Node ets_+ onone f (Leaf x) = runTreeT $ f x++instance MonadTrans TreeT where+ lift x = TreeT $ x >>= return . Leaf++instance Functor m => Functor (TreeT m) where+ fmap = treeT1 . fmap . fmap++instance Applicative m => Applicative (TreeT m)where+ pure = treeT0 . pure . pure+ (<*>) = treeT2 . liftA2 . liftA2 $ id++instance MonadIO m => MonadIO (TreeT m) where+ liftIO = lift . liftIO+
LTree.cabal view
@@ -1,5 +1,5 @@ Name: LTree-Version: 0.0+Version: 0.1 Cabal-Version: >=1.6 Synopsis: Tree with only leaves carrying the data. Description:@@ -19,7 +19,7 @@ Library Build-Depends: base >= 2 && < 5, transformers- Exposed-Modules: Data.Trees.LTree+ Exposed-Modules: Data.Trees.LTree, Control.Trees.LTreeT Source-Repository head type: darcs