[Haskell-cafe] bottomless Top?

Conor McBride conor at strictlypositive.org
Thu May 15 06:56:48 EDT 2008


Folks

[statutory warning: functors, terminal objects, unsafeCoerce]

I had a peculiar notion this morning to wonder whether I could
get away with

   shape :: Functor f => f a -> f ()
   shape fa = unsafeCoerce fa

Sure enough, ghci gives me

*Top> shape "moo"
[(),(),()]
*Top> shape [undefined]
[*** Exception: Prelude.undefined

which shows that pattern matching does just enough work to
check that an element of () isn't bottom. I'm just wondering
if that's really what's happening, what other implementations
do, and how the garbage collector would react: would all
those a's hang around for as long as the shape?

I'm also wondering whether it makes sense to have a
"bottomless Top" type, with constructor _ and lazy pattern _
(with (undefined :: Top) equal to _). Then the constant-time
shape operator makes the same sort of sense as the
constant-time

   inflate :: Functor f => f Zero -> f a

Any thoughts on either or both?

Cheers

Conor



More information about the Haskell-Cafe mailing list