X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=Data%2FTraversable.hs;h=28fa761b98347955a6bbf64e5c4d089f2a01634f;hb=e74a10138daf9fd70888a1841bd6cc93b9cca9f2;hp=df10679cf40e27cc8252e16fa5766340b770bd7d;hpb=8d585f7c5ad8c4b46f9ca58931e1379abbd359af;p=ghc-base.git diff --git a/Data/Traversable.hs b/Data/Traversable.hs index df10679..28fa761 100644 --- a/Data/Traversable.hs +++ b/Data/Traversable.hs @@ -47,6 +47,8 @@ import Data.Monoid (Monoid) import GHC.Arr #elif defined(__HUGS__) import Hugs.Array +#elif defined(__NHC__) +import Array #endif -- | Functors representing data structures that can be traversed from @@ -60,7 +62,7 @@ import Hugs.Array -- -- a suitable instance would be -- --- > instance Traversable Tree +-- > instance Traversable Tree where -- > traverse f Empty = pure Empty -- > traverse f (Leaf x) = Leaf <$> f x -- > traverse f (Node l k r) = Node <$> traverse f l <*> f k <*> traverse f r @@ -101,19 +103,18 @@ class (Functor t, Foldable t) => Traversable t where -- instances for Prelude types instance Traversable Maybe where - traverse f Nothing = pure Nothing + traverse _ Nothing = pure Nothing traverse f (Just x) = Just <$> f x instance Traversable [] where + {-# INLINE traverse #-} -- so that traverse can fuse traverse f = Prelude.foldr cons_f (pure []) where cons_f x ys = (:) <$> f x <*> ys mapM = Prelude.mapM -#ifndef __NHC__ instance Ix i => Traversable (Array i) where - traverse f arr = listArray (bounds arr) `fmap` traverse f (elems arr) -#endif + traverse f arr = listArray (bounds arr) `fmap` traverse f (elems arr) -- general functions