Hi,
I get the following message error when compiling a Haskell
program with GHC.
=
Compilation Dump for: /usr/local/lib/ghc-4.08.1/hsc /tmp/ghc6065.cpp 2
erros -fglasgow-exts -fignore-interface-pragmas -fomit-interface-pragmas
-fsimplify [ -fmax-simplifier-iterations4 ]
-fwarn-overlapping-patterns -fwarn-missing-methods -fwarn-missing-fields
-fwarn-deprecations -fwarn-duplicate-exports -fhi-version=408 -static
"-himap=.%.hi:/usr/local/lib/ghc-4.08.1/imports/lang%.hi:/usr/local/lib/ghc-4.08.1/imports/lang%.hi:/usr/local/lib/ghc-4.08.1/imports/std%.hi"
"-himap-sep=:" -hifile=/tmp/ghc6065.hi -olang=asm
-ofile=/tmp/ghc6065.s -F=/tmp/ghc6065_stb.c -FH=/tmp/ghc6065_stb.h +RTS
-H600 -K100
panic! (the `impossible' happened):
cgEvalAlts: dodgy case of unboxed tuple type
Please report it as a compiler bug to [EMAIL PROTECTED]
=
The source code that produces error is:
=
module MessagePassing where
import PackUnpack
foreign import forceSend :: Int# - Int# - IO ()
foreign import forceRecv :: Int# - Int# - IO ()
data Protocol t = H t = H (# Int#, t #)
class Empacotavel t = Protocol t where
send :: Int# - Int# - t - IO ()
send trg# cha# v = pack' v
forceSend trg# cha#
where
pack' :: t - IO ()
pack' v = return (I# (pack 0# v))
return ()
recv :: Int# - Int# - IO t
recv src# cha# = forceRecv src# cha#
unpack' 0#
where
unpack' :: Int# - IO t
unpack' i# = return (H (unpack 0#)) = \ (H
(# _, v #)) -
return v
instance Protocol Int
instance Protocol Char
instance Protocol Float
instance Protocol Double
instance Protocol Bool
instance Protocol Integer
instance Protocol ()
instance Protocol t = Protocol [t]
instance Protocol a = Protocol (Maybe a)
instance (Protocol a, Protocol b) = Protocol (Either a b)
instance Protocol Ordering
instance (Integral a, Protocol a) = Protocol (Ratio a)
instance (Protocol a, RealFloat a) = Protocol (Complex a)
instance (Ix a, Protocol a, Protocol b) = Protocol (Array a b)
instance (Protocol t, Protocol u) = Protocol (t,u)
instance (Protocol t, Protocol u, Protocol v) = Protocol (t,u,v)
instance (Protocol t, Protocol u, Protocol v, Protocol w) = Protocol
(t,u,v,w)
instance (Protocol t, Protocol u, Protocol v, Protocol w, Protocol x) =
Protocol (t,u,v,w,x)
instance Protocol Int8
instance Protocol Int16
instance Protocol Int32
instance Protocol Int64
instance Protocol Word8
instance Protocol Word16
instance Protocol Word32
instance Protocol Word64
--instance Protocol Dynamic
--instance (Ix ix, Protocol ix) = Protocol (ByteArray ix)
--instance (Ix ix, Protocol ix) = Protocol (MutableByteArray ix)
The definition of the Empacotavel type class is presented below...
class Empacotavel t where
pack :: Int# - t - Int#
unpack :: Int# - (# Int#, t #)
Heron de Carvalho