git.iko.soy/rowtype-yoga/purescript-native
on golang help sign in
Added Data.Traversable and instances.
commitec80a9e1178929a13979cb2e26dfdf74e20ee3c6 authorjoneshf <jones3.hardy@gmail.com> dateMon 10 Mar 2014, 00:59 (13 years ago) parent3a1c806
2 files changed+59
examples/passing/Traversable.purs+8 prelude/prelude.purs+51
examples/passing/Traversable.pursnew file+8
@@ -0,0 +1,8 @@
1+module Main where
2+
3+ import Prelude
4+ import Data.Array
5+ import Data.Maybe
6+ import Data.Traversable
7+
8+ main = Debug.Trace.print (sequence (Just [1,2,3]))
prelude/prelude.purs+51
@@ -729,6 +729,9 @@ module Data.Tuple where
729729 (==) (Tuple a1 b1) (Tuple a2 b2) = a1 == a2 && b1 == b2
730730 (/=) t1 t2 = not (t1 == t2)
731731
732+ instance functorTuple :: Functor (Tuple a) where
733+ (<$>) f (Tuple x y) = Tuple x (f y)
734+
732735module Data.String where
733736
734737 foreign import lengthS "function lengthS(s) {\
@@ -1313,3 +1316,51 @@ module Data.Foldable where
13131316
13141317 sequence_ :: forall a f m. (Applicative m, Foldable f) => f (m a) -> m {}
13151318 sequence_ = traverse_ id
1319+
1320+module Data.Traversable where
1321+
1322+ import Prelude
1323+ import Data.Array ((:))
1324+ import Data.Either
1325+ import Data.Eq
1326+ import Data.Foldable
1327+ import Data.Maybe
1328+ import Data.Tuple
1329+
1330+ class Traversable t where
1331+ traverse :: forall a b m. (Applicative m) => (a -> m b) -> t a -> m (t b)
1332+ sequence :: forall a m. (Applicative m) => t (m a) -> m (t a)
1333+
1334+ instance traversableArray :: Traversable [] where
1335+ traverse _ [] = pure []
1336+ traverse f (x:xs) = (:) <$> (f x) <*> traverse f xs
1337+
1338+ sequence [] = pure []
1339+ sequence (x:xs) = (:) <$> x <*> sequence xs
1340+
1341+ instance traversableEither :: Traversable (Either a) where
1342+ traverse _ (Left x) = pure (Left x)
1343+ traverse f (Right x) = Right <$> f x
1344+
1345+ sequence (Left x) = pure (Left x)
1346+ sequence (Right x) = Right <$> x
1347+
1348+ instance traversableRef :: Traversable Ref where
1349+ traverse f (Ref x) = Ref <$> f x
1350+
1351+ sequence (Ref x) = Ref <$> x
1352+
1353+ instance traversableMaybe :: Traversable Maybe where
1354+ traverse _ Nothing = pure Nothing
1355+ traverse f (Just x) = Just <$> f x
1356+
1357+ sequence Nothing = pure Nothing
1358+ sequence (Just x) = Just <$> x
1359+
1360+ instance traversableTuple :: Traversable (Tuple a) where
1361+ traverse f (Tuple x y) = Tuple x <$> f y
1362+
1363+ sequence (Tuple x y) = Tuple x <$> y
1364+
1365+ for :: forall a b m t. (Applicative m, Traversable t) => t a -> (a -> m b) -> m (t b)
1366+ for x f = traverse f x