On Fri, Mar 26, 2010 at 11:07 AM, Edward Kmett <ekm...@gmail.com> wrote: > > On Fri, Mar 26, 2010 at 11:04 AM, Edward Kmett <ekm...@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) =)
It all depends on how you define equality for functions. If you mean indistinguishable in contexts which may involve seq, then there are at least two values of type Unit -> (). foo :: (Unit -> ()) -> () foo x = x `seq` () foo terminate = () foo undefined = undefined Even this uses the convention that undefined = error "whatever" = loop, which isn't technically true, since you can use exception handling to write code which treats them differently. -- Dave Menendez <d...@zednenem.com> <http://www.eyrie.org/~zednenem/> _______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe