[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