
I noticed a coreFunc has an extra argument and I'm not sure where it's coming from. For example if I compile: main :: IO () main = return () and print out the coreFuncs and coreDatas I get: Main;main = Prelude;YHC.Internal.IO;Prelude.Monad;return Prelude;() Prelude;1807_ioReturn v25601 v25602 = YHC.Primitive;_E v25601 Prelude;YHC.Internal.IO;Prelude.Monad;return v25600 = Prelude;1807_ioReturn v25600 main = Main;main data YHC.Primitive;_E b = YHC.Primitive;_E b data Prelude;() = Prelude;() Why does Prelude;1807_ioReturn include an extra argument (v25602) that is not used? If I informally type check this by hand, I get a contradiction: main :: IO () Main;main :: IO () Prelude;YHC.Internal.IO;Prelude.Monad;return :: a -> IO a Prelude;YHC.Internal.IO;Prelude.Monad;return = Prelude;1807_ioReturn Therefore if follows: Prelude;1807_ioReturn :: a -> IO a But the Prelude;1807_ioReturn definition has type: Prelude;1807_ioReturn :: a -> b -> YHC.Primitive;_E a What am I missing here? Am I to interpret this as meaning: b -> YHC.Primitive;_E a == IO a ? Thanks for any help! -Tom