OrdList: Add Foldable, Traversable instances
authorBen Gamari <bgamari.foss@gmail.com>
Tue, 29 Nov 2016 19:45:19 +0000 (14:45 -0500)
committerBen Gamari <ben@smart-cactus.org>
Tue, 29 Nov 2016 19:45:19 +0000 (14:45 -0500)
Test Plan: Validate

Reviewers: austin, simonmar

Reviewed By: simonmar

Subscribers: thomie

Differential Revision: https://phabricator.haskell.org/D2740

compiler/utils/OrdList.hs

index 625886d..3c5b9d7 100644 (file)
@@ -49,6 +49,15 @@ instance Monoid (OrdList a) where
   mappend = appOL
   mconcat = concatOL
 
+instance Functor OrdList where
+  fmap = mapOL
+
+instance Foldable OrdList where
+  foldr = foldrOL
+
+instance Traversable OrdList where
+  traverse f xs = toOL <$> traverse f (fromOL xs)
+
 nilOL    :: OrdList a
 isNilOL  :: OrdList a -> Bool
 
@@ -98,9 +107,6 @@ mapOL f (Snoc xs x) = Snoc (mapOL f xs) (f x)
 mapOL f (Two x y) = Two (mapOL f x) (mapOL f y)
 mapOL f (Many xs) = Many (map f xs)
 
-instance Functor OrdList where
-  fmap = mapOL
-
 foldrOL :: (a->b->b) -> b -> OrdList a -> b
 foldrOL _ z None        = z
 foldrOL k z (One x)     = k x z