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)