Traversable instance
authorJoachim Breitner <mail@joachim-breitner.de>
Sun, 8 Feb 2009 20:49:25 +0000 (21:49 +0100)
committerJoachim Breitner <mail@joachim-breitner.de>
Sun, 8 Feb 2009 20:49:25 +0000 (21:49 +0100)
src/Lseed/Data.hs

index b16cb8b..b1957b9 100644 (file)
@@ -2,6 +2,8 @@
 module Lseed.Data where 
 
 import Data.Foldable (Foldable, fold)
+import Data.Traversable (Traversable, sequenceA)
+import Control.Applicative ((<$>),(<*>),pure)
 import Data.Monoid
 
 -- | A list of plants, together with their position in the garden, in the interval [0,1]
@@ -43,5 +45,14 @@ instance Foldable Plant where
        fold (Stipe x len p1) = x `mappend` fold p1
        fold (Fork x angle p1 p2) = x `mappend` fold p1 `mappend` fold p2
 
+instance Traversable Plant where
+       sequenceA (Bud x) =
+               Bud <$> x
+       sequenceA (Stipe x len p1) =
+               Stipe <$> x <*> pure len <*> sequenceA p1
+       sequenceA (Fork x angle p1 p2) =
+               Fork <$> x <*> pure angle <*> sequenceA p1 <*> sequenceA p2
+       
+
 instance Functor Planted where
        fmap f planted = planted { phenotype = fmap f (phenotype planted) }