module Hat.Monad (MonadPlus(gmzero,gmplus,smzero,smplus),gjoin,ajoin,hjoin,gguard,aguard,hguard ,gwhen,awhen,hwhen,gunless,aunless,hunless,gap,gmsum,amsum,hmsum,gfilterM ,afilterM,hfilterM,gmapAndUnzipM,amapAndUnzipM,hmapAndUnzipM,gzipWithM ,azipWithM,hzipWithM,gzipWithM_,azipWithM_,hzipWithM_,gfoldM,afoldM,hfoldM ,gliftM,aliftM,hliftM,gliftM2,aliftM2,hliftM2,gliftM3,aliftM3,hliftM3 ,gliftM4,aliftM4,hliftM4,gliftM5,aliftM5,hliftM5,Monad((!>>=),(!>>),greturn ,gfail,(|>>=),(|>>),sreturn,sfail),Functor(gfmap,sfmap),gmapM,amapM,hmapM ,gmapM_,amapM_,hmapM_,gsequence,gsequence_,(!=<<),(+=<<),(*=<<)) where import qualified Hat.PreludeBasic import qualified Prelude import Hat.Hack import qualified Hat.Hat as T import Hat.Hat (WrapVal(wrapVal)) import Hat.Prelude class Monad m => MonadPlus m where gmzero :: T.RefSrcPos -> T.RefExp -> T.R (m a) gmplus :: T.RefSrcPos -> T.RefExp -> T.R (T.Fun (m a) (T.Fun (m a) (m a))) smzero :: T.R (m a) smplus :: T.R (T.Fun (m a) (T.Fun (m a) (m a))) instance MonadPlus (Maybe) where gmzero pmzero p = T.uconstUse pmzero p smzero smzero = T.uconstDef T.mkRoot a25v5v25v35mzero (\ p -> T.con0 T.mkNoSrcPos p Nothing aNothing) gmplus pmplus p = T.ufun2 a27v14v28v18mplus pmplus p hmplus where hmplus (T.R Nothing _) fys p = T.projection T.mkNoSrcPos p fys hmplus fxs fys p = T.projection T.mkNoSrcPos p fxs instance MonadPlus (T.List) where gmzero pmzero p = T.uconstUse pmzero p smzero smzero = T.uconstDef T.mkRoot a31v5v31v15mzero (\ p -> T.con0 T.mkNoSrcPos p T.List T.aList) gmplus pmplus p = T.uconstUse pmplus p smplus smplus = T.uconstDef T.mkRoot a32v5v32v15mplus (\ p -> (T.mkNoSrcPos !++ p)) gmsum :: MonadPlus m => T.RefSrcPos -> T.RefExp -> T.R (T.Fun (T.List (m a)) (m a)) hmsum :: MonadPlus m => (T.R (T.List (m a))) -> T.RefExp -> T.R (m a) gmsum pmsum p = T.ufun1 amsum pmsum p hmsum hmsum fxs p = T.uwrapForward p (hfoldr (gmplus T.mkNoSrcPos p) (gmzero T.mkNoSrcPos p) fxs p) gjoin :: Monad m => T.RefSrcPos -> T.RefExp -> T.R (T.Fun (m (m a)) (m a)) hjoin :: Monad m => (T.R (m (m a))) -> T.RefExp -> T.R (m a) gjoin pjoin p = T.ufun1 ajoin pjoin p hjoin hjoin fx p = T.uap2 T.mkNoSrcPos p (T.mkNoSrcPos !>>= p) fx (gid T.mkNoSrcPos p) gwhen :: Monad m => T.RefSrcPos -> T.RefExp -> T.R (T.Fun Bool (T.Fun (m T.Tuple0) (m T.Tuple0))) hwhen :: Monad m => (T.R Bool) -> (T.R (m T.Tuple0)) -> T.RefExp -> T.R (m T.Tuple0) gwhen pwhen p = T.ufun2 awhen pwhen p hwhen hwhen fp fs p = T.ucif p fp (T.projection T.mkNoSrcPos p fs) (T.uap1 T.mkNoSrcPos p (greturn T.mkNoSrcPos p) (T.con0 T.mkNoSrcPos p T.Tuple0 T.aTuple0)) gunless :: Monad m => T.RefSrcPos -> T.RefExp -> T.R (T.Fun Bool (T.Fun (m T.Tuple0) (m T.Tuple0))) hunless :: Monad m => (T.R Bool) -> (T.R (m T.Tuple0)) -> T.RefExp -> T.R (m T.Tuple0) gunless punless p = T.ufun2 aunless punless p hunless hunless fp fs p = T.uwrapForward p (hwhen (T.uwrapForward p (hnot fp p)) fs p) gap :: Monad m => T.RefSrcPos -> T.RefExp -> T.R (T.Fun (m (T.Fun a b)) (T.Fun (m a) (m b))) sap :: Monad m => T.R (T.Fun (m (T.Fun a b)) (T.Fun (m a) (m b))) gap pap p = T.uconstUse pap p sap sap = T.uconstDef T.mkRoot aap (\ p -> T.uwrapForward p (hliftM2 (T.mkNoSrcPos !$ p) p)) gguard :: MonadPlus m => T.RefSrcPos -> T.RefExp -> T.R (T.Fun Bool (m T.Tuple0)) hguard :: MonadPlus m => (T.R Bool) -> T.RefExp -> T.R (m T.Tuple0) gguard pguard p = T.ufun1 aguard pguard p hguard hguard fp p = T.ucif p fp (T.uap1 T.mkNoSrcPos p (greturn T.mkNoSrcPos p) (T.con0 T.mkNoSrcPos p T.Tuple0 T.aTuple0)) (gmzero T.mkNoSrcPos p) gmapAndUnzipM :: Monad m => T.RefSrcPos -> T.RefExp -> T.R (T.Fun (T.Fun a (m (T.Tuple2 b c))) (T.Fun (T.List a) (m (T.Tuple2 (T.List b) (T.List c))))) hmapAndUnzipM :: Monad m => (T.R (T.Fun a (m (T.Tuple2 b c)))) -> (T.R (T.List a)) -> T.RefExp -> T.R (m (T.Tuple2 (T.List b) (T.List c))) gmapAndUnzipM pmapAndUnzipM p = T.ufun2 amapAndUnzipM pmapAndUnzipM p hmapAndUnzipM hmapAndUnzipM ff fxs p = T.uap2 T.mkNoSrcPos p (T.mkNoSrcPos !>>= p) (T.uap1 T.mkNoSrcPos p (gsequence T.mkNoSrcPos p) (T.uwrapForward p (hmap ff fxs p))) (T.uap2 T.mkNoSrcPos p (T.mkNoSrcPos !. p) (greturn T.mkNoSrcPos p) (gunzip T.mkNoSrcPos p)) gzipWithM :: Monad m => T.RefSrcPos -> T.RefExp -> T.R (T.Fun (T.Fun a (T.Fun b (m c))) (T.Fun (T.List a) (T.Fun (T.List b) (m (T.List c))))) hzipWithM :: Monad m => (T.R (T.Fun a (T.Fun b (m c)))) -> (T.R (T.List a)) -> (T.R (T.List b)) -> T.RefExp -> T.R (m (T.List c)) gzipWithM pzipWithM p = T.ufun3 azipWithM pzipWithM p hzipWithM hzipWithM ff fxs fys p = T.uap1 T.mkNoSrcPos p (gsequence T.mkNoSrcPos p) (T.uwrapForward p (hzipWith ff fxs fys p)) gzipWithM_ :: Monad m => T.RefSrcPos -> T.RefExp -> T.R (T.Fun (T.Fun a (T.Fun b (m c))) (T.Fun (T.List a) (T.Fun (T.List b) (m T.Tuple0)))) hzipWithM_ :: Monad m => (T.R (T.Fun a (T.Fun b (m c)))) -> (T.R (T.List a)) -> (T.R (T.List b)) -> T.RefExp -> T.R (m T.Tuple0) gzipWithM_ pzipWithM_ p = T.ufun3 azipWithM_ pzipWithM_ p hzipWithM_ hzipWithM_ ff fxs fys p = T.uap1 T.mkNoSrcPos p (gsequence_ T.mkNoSrcPos p) (T.uwrapForward p (hzipWith ff fxs fys p)) gfoldM :: Monad m => T.RefSrcPos -> T.RefExp -> T.R (T.Fun (T.Fun a (T.Fun b (m a))) (T.Fun a (T.Fun (T.List b) (m a)))) hfoldM :: Monad m => (T.R (T.Fun a (T.Fun b (m a)))) -> (T.R a) -> (T.R (T.List b)) -> T.RefExp -> T.R (m a) gfoldM pfoldM p = T.ufun3 afoldM pfoldM p hfoldM hfoldM ff fa (T.R T.List _) p = T.uap1 T.mkNoSrcPos p (greturn T.mkNoSrcPos p) fa hfoldM ff fa (T.R (T.Cons fx fxs) _) p = T.uap2 T.mkNoSrcPos p (T.mkNoSrcPos !>>= p) (T.uap2 T.mkNoSrcPos p ff fa fx) (T.ufun1 T.mkLambda T.mkNoSrcPos p (\ fy p -> T.uwrapForward p (hfoldM ff fy fxs p))) hfoldM _ _ _ p = T.fatal p gfilterM :: Monad m => T.RefSrcPos -> T.RefExp -> T.R (T.Fun (T.Fun a (m Bool)) (T.Fun (T.List a) (m (T.List a)))) hfilterM :: Monad m => (T.R (T.Fun a (m Bool))) -> (T.R (T.List a)) -> T.RefExp -> T.R (m (T.List a)) gfilterM pfilterM p = T.ufun2 afilterM pfilterM p hfilterM hfilterM fp (T.R T.List _) p = T.uap1 T.mkNoSrcPos p (greturn T.mkNoSrcPos p) (T.con0 T.mkNoSrcPos p T.List T.aList) hfilterM fp (T.R (T.Cons fx fxs) _) p = T.uap2 T.mkNoSrcPos p (T.mkNoSrcPos Hat.Prelude.!>>= p) (T.uap1 T.mkNoSrcPos p fp fx) (T.ufun1 T.mkDoLambda T.mkNoSrcPos p (\ fb p -> T.uap2 T.mkNoSrcPos p (T.mkNoSrcPos Hat.Prelude.!>>= p) (T.uwrapForward p (hfilterM fp fxs p)) (T.ufun1 T.mkDoLambda T.mkNoSrcPos p (\ fys p -> T.uap1 T.mkNoSrcPos p (greturn T.mkNoSrcPos p) (T.ucif p fb (T.con2 T.mkNoSrcPos p T.Cons T.aCons fx fys) (T.projection T.mkNoSrcPos p fys)))))) hfilterM _ _ p = T.fatal p gliftM :: Monad m => T.RefSrcPos -> T.RefExp -> T.R (T.Fun (T.Fun a b) (T.Fun (m a) (m b))) hliftM :: Monad m => (T.R (T.Fun a b)) -> T.RefExp -> T.R (T.Fun (m a) (m b)) gliftM pliftM p = T.ufun1 aliftM pliftM p hliftM hliftM ff p = T.ufun1 T.mkLambda T.mkNoSrcPos p (\ fa p -> T.uap2 T.mkNoSrcPos p (T.mkNoSrcPos Hat.Prelude.!>>= p) fa (T.ufun1 T.mkDoLambda T.mkNoSrcPos p (\ fa' p -> T.uap1 T.mkNoSrcPos p (greturn T.mkNoSrcPos p) (T.uap1 T.mkNoSrcPos p ff fa')))) gliftM2 :: Monad m => T.RefSrcPos -> T.RefExp -> T.R (T.Fun (T.Fun a (T.Fun b c)) (T.Fun (m a) (T.Fun (m b) (m c)))) hliftM2 :: Monad m => (T.R (T.Fun a (T.Fun b c))) -> T.RefExp -> T.R (T.Fun (m a) (T.Fun (m b) (m c))) gliftM2 pliftM2 p = T.ufun1 aliftM2 pliftM2 p hliftM2 hliftM2 ff p = T.ufun2 T.mkLambda T.mkNoSrcPos p (\ fa fb p -> T.uap2 T.mkNoSrcPos p (T.mkNoSrcPos Hat.Prelude.!>>= p) fa (T.ufun1 T.mkDoLambda T.mkNoSrcPos p (\ fa' p -> T.uap2 T.mkNoSrcPos p (T.mkNoSrcPos Hat.Prelude.!>>= p) fb (T.ufun1 T.mkDoLambda T.mkNoSrcPos p (\ fb' p -> T.uap1 T.mkNoSrcPos p (greturn T.mkNoSrcPos p) (T.uap2 T.mkNoSrcPos p ff fa' fb')))))) gliftM3 :: Monad m => T.RefSrcPos -> T.RefExp -> T.R (T.Fun (T.Fun a (T.Fun b (T.Fun c d))) (T.Fun (m a) (T.Fun (m b) (T.Fun (m c) (m d))))) hliftM3 :: Monad m => (T.R (T.Fun a (T.Fun b (T.Fun c d)))) -> T.RefExp -> T.R (T.Fun (m a) (T.Fun (m b) (T.Fun (m c) (m d)))) gliftM3 pliftM3 p = T.ufun1 aliftM3 pliftM3 p hliftM3 hliftM3 ff p = T.ufun3 T.mkLambda T.mkNoSrcPos p (\ fa fb fc p -> T.uap2 T.mkNoSrcPos p (T.mkNoSrcPos Hat.Prelude.!>>= p) fa (T.ufun1 T.mkDoLambda T.mkNoSrcPos p (\ fa' p -> T.uap2 T.mkNoSrcPos p (T.mkNoSrcPos Hat.Prelude.!>>= p) fb (T.ufun1 T.mkDoLambda T.mkNoSrcPos p (\ fb' p -> T.uap2 T.mkNoSrcPos p (T.mkNoSrcPos Hat.Prelude.!>>= p) fc (T.ufun1 T.mkDoLambda T.mkNoSrcPos p (\ fc' p -> T.uap1 T.mkNoSrcPos p (greturn T.mkNoSrcPos p) (T.uap3 T.mkNoSrcPos p ff fa' fb' fc')))))))) gliftM4 :: Monad m => T.RefSrcPos -> T.RefExp -> T.R (T.Fun (T.Fun a (T.Fun b (T.Fun c (T.Fun d e)))) (T.Fun (m a) (T.Fun (m b) (T.Fun (m c) (T.Fun (m d) (m e)))))) hliftM4 :: Monad m => (T.R (T.Fun a (T.Fun b (T.Fun c (T.Fun d e))))) -> T.RefExp -> T.R (T.Fun (m a) (T.Fun (m b) (T.Fun (m c) (T.Fun (m d) (m e))))) gliftM4 pliftM4 p = T.ufun1 aliftM4 pliftM4 p hliftM4 hliftM4 ff p = T.ufun4 T.mkLambda T.mkNoSrcPos p (\ fa fb fc fd p -> T.uap2 T.mkNoSrcPos p (T.mkNoSrcPos Hat.Prelude.!>>= p) fa (T.ufun1 T.mkDoLambda T.mkNoSrcPos p (\ fa' p -> T.uap2 T.mkNoSrcPos p (T.mkNoSrcPos Hat.Prelude.!>>= p) fb (T.ufun1 T.mkDoLambda T.mkNoSrcPos p (\ fb' p -> T.uap2 T.mkNoSrcPos p (T.mkNoSrcPos Hat.Prelude.!>>= p) fc (T.ufun1 T.mkDoLambda T.mkNoSrcPos p (\ fc' p -> T.uap2 T.mkNoSrcPos p (T.mkNoSrcPos Hat.Prelude.!>>= p) fd (T.ufun1 T.mkDoLambda T.mkNoSrcPos p (\ fd' p -> T.uap1 T.mkNoSrcPos p (greturn T.mkNoSrcPos p) (T.uap4 T.mkNoSrcPos p ff fa' fb' fc' fd')))))))))) gliftM5 :: Monad m => T.RefSrcPos -> T.RefExp -> T.R (T.Fun (T.Fun a (T.Fun b (T.Fun c (T.Fun d (T.Fun e f))))) (T.Fun (m a) (T.Fun (m b) (T.Fun (m c) (T.Fun (m d) (T.Fun (m e) (m f))))))) hliftM5 :: Monad m => (T.R (T.Fun a (T.Fun b (T.Fun c (T.Fun d (T.Fun e f)))))) -> T.RefExp -> T.R (T.Fun (m a) (T.Fun (m b) (T.Fun (m c) (T.Fun (m d) (T.Fun (m e) (m f)))))) gliftM5 pliftM5 p = T.ufun1 aliftM5 pliftM5 p hliftM5 hliftM5 ff p = T.ufun5 T.mkLambda T.mkNoSrcPos p (\ fa fb fc fd fe p -> T.uap2 T.mkNoSrcPos p (T.mkNoSrcPos Hat.Prelude.!>>= p) fa (T.ufun1 T.mkDoLambda T.mkNoSrcPos p (\ fa' p -> T.uap2 T.mkNoSrcPos p (T.mkNoSrcPos Hat.Prelude.!>>= p) fb (T.ufun1 T.mkDoLambda T.mkNoSrcPos p (\ fb' p -> T.uap2 T.mkNoSrcPos p (T.mkNoSrcPos Hat.Prelude.!>>= p) fc (T.ufun1 T.mkDoLambda T.mkNoSrcPos p (\ fc' p -> T.uap2 T.mkNoSrcPos p (T.mkNoSrcPos Hat.Prelude.!>>= p) fd (T.ufun1 T.mkDoLambda T.mkNoSrcPos p (\ fd' p -> T.uap2 T.mkNoSrcPos p (T.mkNoSrcPos Hat.Prelude.!>>= p) fe (T.ufun1 T.mkDoLambda T.mkNoSrcPos p (\ fe' p -> T.uap1 T.mkNoSrcPos p (greturn T.mkNoSrcPos p) (T.uap5 T.mkNoSrcPos p ff fa' fb' fc' fd' fe')))))))))))) tMonad = T.mkModule "Monad" "Monad.hs" Prelude.False amsum = T.mkVariable tMonad 390001 390032 3 1 "msum" Prelude.False ajoin = T.mkVariable tMonad 420001 420028 3 1 "join" Prelude.False awhen = T.mkVariable tMonad 450001 450047 3 2 "when" Prelude.False aunless = T.mkVariable tMonad 480001 480034 3 2 "unless" Prelude.False aap = T.mkVariable tMonad 510001 510029 3 0 "ap" Prelude.False aguard = T.mkVariable tMonad 540001 540051 3 1 "guard" Prelude.False amapAndUnzipM = T.mkVariable tMonad 570001 570058 3 2 "mapAndUnzipM" Prelude.False azipWithM = T.mkVariable tMonad 600001 600045 3 3 "zipWithM" Prelude.False azipWithM_ = T.mkVariable tMonad 630001 630047 3 3 "zipWithM_" Prelude.False afoldM = T.mkVariable tMonad 660001 670049 3 3 "foldM" Prelude.False afilterM = T.mkVariable tMonad 700001 730032 3 2 "filterM" Prelude.False aliftM = T.mkVariable tMonad 770001 770052 3 1 "liftM" Prelude.False aliftM2 = T.mkVariable tMonad 800001 800066 3 1 "liftM2" Prelude.False aliftM3 = T.mkVariable tMonad 840001 850021 3 1 "liftM3" Prelude.False aliftM4 = T.mkVariable tMonad 890001 900026 3 1 "liftM4" Prelude.False aliftM5 = T.mkVariable tMonad 940001 950040 3 1 "liftM5" Prelude.False a25v5v25v35mzero = T.mkVariable tMonad 250005 250035 3 0 "mzero" Prelude.False a27v14v28v18mplus = T.mkVariable tMonad 270014 280018 3 2 "mplus" Prelude.False a31v5v31v15mzero = T.mkVariable tMonad 310005 310015 3 0 "mzero" Prelude.False a32v5v32v15mplus = T.mkVariable tMonad 320005 320015 3 0 "mplus" Prelude.False