Hi,

while trying to compile the attached file MonadT.hs I got the following error:

ghc  -fglasgow-exts   -c -o MonadT.o MonadT.hs
ghc-5.02: panic! (the `impossible' happened, GHC version 5.02):
        coreSyn/Subst.lhs:387: Non-exhaustive patterns in function zip_ty_env
 
 
Please report it as a compiler bug to [EMAIL PROTECTED],
or http://sourceforge.net/projects/ghc/.

--
uname -a
Linux hobbes 2.2.17 #2 SMP Sun Dec 3 22:42:15 CET 2000 i686 unknown           
                   
gcc -v
Reading specs from /usr/lib/gcc-lib/i386-linux/2.95.2/specs
gcc version 2.95.2 20000220 (Debian GNU/Linux)

output while running with -v enabled:
ghc  -fglasgow-exts -v   -c -o MonadT.o MonadT.hs
Glasgow Haskell Compiler, Version 5.02, for Haskell 98, compiled by GHC 
version 5.02
Using package config file: /usr/lib/ghc-5.02/package.conf

==================== Packages ====================
Package
   {name = "gmp",
    import_dirs = [],
    source_dirs = [],
    library_dirs = [],
    hs_libraries = [],
    extra_libraries = ["gmp"],
    include_dirs = [],
    c_includes = [],
    package_deps = [],
    extra_ghc_opts = [],
    extra_cc_opts = [],
    extra_ld_opts = []}
Package
   {name = "rts",
    import_dirs = [],
    source_dirs = [],
    library_dirs = ["/usr/lib/ghc-5.02"],
    hs_libraries = ["HSrts"],
    extra_libraries = ["m"],
    include_dirs = ["/usr/lib/ghc-5.02/include"],
    c_includes = ["Stg.h"],
    package_deps = ["gmp"],
    extra_ghc_opts = [],
    extra_cc_opts = [],
    extra_ld_opts =
      ["-u",
       "PrelBase_Izh_static_info",
       "-u",
       "PrelBase_Czh_static_info",
       "-u",
       "PrelFloat_Fzh_static_info",
       "-u",
       "PrelFloat_Dzh_static_info",
       "-u",
       "PrelPtr_Ptr_static_info",
       "-u",
       "PrelWord_Wzh_static_info",
       "-u",
       "PrelInt_I8zh_static_info",
       "-u",
       "PrelInt_I16zh_static_info",
       "-u",
       "PrelInt_I32zh_static_info",
       "-u",
       "PrelInt_I64zh_static_info",
       "-u",
       "PrelWord_W8zh_static_info",
       "-u",
       "PrelWord_W16zh_static_info",
       "-u",
       "PrelWord_W32zh_static_info",
       "-u",
       "PrelWord_W64zh_static_info",
       "-u",
       "PrelStable_StablePtr_static_info",
       "-u",
       "PrelBase_Izh_con_info",
       "-u",
       "PrelBase_Czh_con_info",
       "-u",
       "PrelFloat_Fzh_con_info",
       "-u",
       "PrelFloat_Dzh_con_info",
       "-u",
       "PrelPtr_Ptr_con_info",
       "-u",
       "PrelStable_StablePtr_con_info",
       "-u",
       "PrelBase_False_closure",
       "-u",
       "PrelBase_True_closure",
       "-u",
       "PrelPack_unpackCString_closure",
       "-u",
       "PrelIOBase_stackOverflow_closure",
       "-u",
       "PrelIOBase_heapOverflow_closure",
       "-u",
       "PrelIOBase_NonTermination_closure",
       "-u",
       "PrelIOBase_BlockedOnDeadMVar_closure",
       "-u",
       "PrelWeak_runFinalizzerBatch_closure",
       "-u",
       "__stginit_Prelude"]}
Package
   {name = "std",
    import_dirs = ["/usr/lib/ghc-5.02/imports/std"],
    source_dirs = [],
    library_dirs = ["/usr/lib/ghc-5.02"],
    hs_libraries = ["HSstd"],
    extra_libraries = ["HSstd_cbits"],
    include_dirs = [],
    c_includes = ["HsStd.h"],
    package_deps = ["rts"],
    extra_ghc_opts = [],
    extra_cc_opts = [],
    extra_ld_opts = []}
Package
   {name = "lang",
    import_dirs = ["/usr/lib/ghc-5.02/imports/lang"],
    source_dirs = [],
    library_dirs = ["/usr/lib/ghc-5.02"],
    hs_libraries = ["HSlang"],
    extra_libraries = ["HSlang_cbits"],
    include_dirs = [],
    c_includes = ["HsLang.h"],
    package_deps = [],
    extra_ghc_opts = [],
    extra_cc_opts = [],
    extra_ld_opts = ["-u", "Addr_Azh_static_info"]}
Package
   {name = "concurrent",
    import_dirs = ["/usr/lib/ghc-5.02/imports/concurrent"],
    source_dirs = [],
    library_dirs = ["/usr/lib/ghc-5.02"],
    hs_libraries = ["HSconcurrent"],
    extra_libraries = [],
    include_dirs = [],
    c_includes = [],
    package_deps = ["lang"],
    extra_ghc_opts = [],
    extra_cc_opts = [],
    extra_ld_opts = []}
Package
   {name = "data",
    import_dirs = ["/usr/lib/ghc-5.02/imports/data"],
    source_dirs = [],
    library_dirs = ["/usr/lib/ghc-5.02"],
    hs_libraries = ["HSdata"],
    extra_libraries = [],
    include_dirs = [],
    c_includes = [],
    package_deps = ["lang", "util"],
    extra_ghc_opts = [],
    extra_cc_opts = [],
    extra_ld_opts = []}
Package
   {name = "net",
    import_dirs = ["/usr/lib/ghc-5.02/imports/net"],
    source_dirs = [],
    library_dirs = ["/usr/lib/ghc-5.02"],
    hs_libraries = ["HSnet"],
    extra_libraries = [],
    include_dirs = [],
    c_includes = ["HsNet.h"],
    package_deps = ["lang", "text", "concurrent"],
    extra_ghc_opts = [],
    extra_cc_opts = [],
    extra_ld_opts = []}
Package
   {name = "posix",
    import_dirs = ["/usr/lib/ghc-5.02/imports/posix"],
    source_dirs = [],
    library_dirs = ["/usr/lib/ghc-5.02"],
    hs_libraries = ["HSposix"],
    extra_libraries = ["HSposix_cbits"],
    include_dirs = [],
    c_includes = ["HsPosix.h"],
    package_deps = ["lang"],
    extra_ghc_opts = [],
    extra_cc_opts = [],
    extra_ld_opts = []}
Package
   {name = "text",
    import_dirs = ["/usr/lib/ghc-5.02/imports/text"],
    source_dirs = [],
    library_dirs = ["/usr/lib/ghc-5.02"],
    hs_libraries = ["HStext"],
    extra_libraries = ["HStext_cbits"],
    include_dirs = [],
    c_includes = ["HsText.h"],
    package_deps = ["lang"],
    extra_ghc_opts = [],
    extra_cc_opts = [],
    extra_ld_opts = []}
Package
   {name = "util",
    import_dirs = ["/usr/lib/ghc-5.02/imports/util"],
    source_dirs = [],
    library_dirs = ["/usr/lib/ghc-5.02"],
    hs_libraries = ["HSutil"],
    extra_libraries = ["HSutil_cbits", "readline", "ncurses"],
    include_dirs = [],
    c_includes = ["HsUtil.h"],
    package_deps = ["lang", "concurrent", "posix"],
    extra_ghc_opts = [],
    extra_cc_opts = [],
    extra_ld_opts = []}
Package
   {name = "hssource",
    import_dirs = ["/usr/lib/ghc-5.02/imports/hssource"],
    source_dirs = [],
    library_dirs = ["/usr/lib/ghc-5.02"],
    hs_libraries = ["HShssource"],
    extra_libraries = [],
    include_dirs = [],
    c_includes = [],
    package_deps = ["text"],
    extra_ghc_opts = [],
    extra_cc_opts = [],
    extra_ld_opts = []}
Package
   {name = "greencard",
    import_dirs = ["/usr/lib/ghc-5.02/imports/greencard"],
    source_dirs = [],
    library_dirs = ["/usr/lib/ghc-5.02"],
    hs_libraries = ["HSgreencard"],
    extra_libraries = [],
    include_dirs = [],
    c_includes = [],
    package_deps = ["lang"],
    extra_ghc_opts = [],
    extra_cc_opts = [],
    extra_ld_opts = []}
Package
   {name = "xlib",
    import_dirs = ["/usr/lib/ghc-5.02/imports/xlib"],
    source_dirs = [],
    library_dirs = ["/usr/lib/ghc-5.02"],
    hs_libraries = ["HSxlib"],
    extra_libraries = ["HSxlib_cbits", "X11"],
    include_dirs = [],
    c_includes = ["HsXlib.h"],
    package_deps = ["greencard"],
    extra_ghc_opts = [],
    extra_cc_opts = [],
    extra_ld_opts = []}
Package
   {name = "HGL",
    import_dirs = ["/usr/lib/ghc-5.02/imports/HGL"],
    source_dirs = [],
    library_dirs = [],
    hs_libraries = ["HSHGL"],
    extra_libraries = [],
    include_dirs = [],
    c_includes = [],
    package_deps = ["xlib", "concurrent"],
    extra_ghc_opts = [],
    extra_cc_opts = [],
    extra_ld_opts = []}
 
 
Hsc static flags: -static -fignore-interface-pragmas -fomit-interface-pragmas 
-fdo-lambda-eta-expansion -flet-no-escape
*** Checking old interface for hs = Just "MonadT.hs", hspp = Just "MonadT.hs":
Compiling MonadT           ( MonadT.hs, MonadT.o )
*** Parser:
*** Renamer:
*** Typechecker:
*** Deleting temp files
Deleting: /tmp/ghc32713.s /tmp/ghc32713.hspp
Warning: deleting non-existent /tmp/ghc32713.s
Warning: deleting non-existent /tmp/ghc32713.hspp
ghc-5.02: panic! (the `impossible' happened, GHC version 5.02):
        coreSyn/Subst.lhs:387: Non-exhaustive patterns in function zip_ty_env
 
 
Please report it as a compiler bug to [EMAIL PROTECTED],
or http://sourceforge.net/projects/ghc/.
-- Monad transformers
-- from an article by Sheng Liang, Paul Hudak, Mark Jones 1995

module MonadT where

--- Monad transformer

class (Monad m, Monad (t m)) => MonadT t m where
	lift :: m a -> t m a

-- lift must fulfill the following "Monad Transformer Laws":
-- 	lift . return_m		= return_tm
--	lift (m >>=_m k)	= (lift m) >>=_tm (lift . k)


--- State monad transformer

type StateT s m a = s -> m (s, a)

-- monad definition
instance Monad m => Monad (StateT s m) where
	return x	= \s -> return (s, x)
	m >>= k	= \s0 -> do (s1, a) <- m s0; k a s1

-- state transformer
instance (Monad m, Monad (StateT s m)) => MonadT (StateT s) m where
	lift m		= \s -> do x <- m; return (s, x)


--- State monad

class Monad m => StateMonad s m where
	update	:: (s -> s) -> m s		-- update state
	property	:: (s -> a) -> m a		-- extract property of state
	apply	:: s -> m s -> s		-- apply to initial state, answer resulting state
	state	:: m s				-- extract state
	state	= property id

instance Monad m => StateMonad s (StateT s m) where
	update f		= \s -> return (f s, s)
	property p	= \s -> return (s, p s)
	apply s m		= fst (m s)

Reply via email to