On Fri, Mar 26, 2010 at 11:04 AM, Edward Kmett <ekmett@gmail.com> wrote:

-- as long as you're ignoring 'seq'
terminateSeq :: a -> Unit
terminateSeq a = a `seq` unit


Er ignore that language about seq. a `seq` unit is either another bottom or undefined, so there remains one canonical morphism even in the presence of seq (ignoring unsafePerformIO) =)
 
-- discounting the extraneous
terminateUnitSeq a = a `seq` undefined


-- and here I should have said.
terminateUnitSeq a = a `seq` ()
 
-Edward Kmett