[Haskell-beginners] Just how unsafe is unsafe

Roel van Dijk vandijk.roel at gmail.com
Fri Feb 6 09:40:47 EST 2009

On Fri, Feb 6, 2009 at 1:00 PM, Antoine Latter <aslatter at gmail.com> wrote:
> Tangential to all of this - sometimes my unsafeXXX functions are pure,
> but partial.  So I'll have:
> foo :: a -> b -> Maybe c
> and
> unsafeFoo :: a -> b -> c

I use the "unsafe" prefix in the same way. For me it means 'assume
that preconditions hold'. If the preconditions do not hold and you
evaluate an unsafe function anyway I would expect an error, as opposed
to an exception. I have done that in my (tiny) roman numerals package.

-- simplified
toRoman :: Int -> Either String Int
unsafeToRoman :: Int -> String

The first function is very clear about the fact that something can go
wrong. If you provide it with a value of (-3) it will (hopefully)
produce something like 'Left "no negative numbers allowed"'. The
second function hides this fact and will result in a (uncatchable)
runtime error. It is still a pure function, but preventing errors is
now the responsibility of whoever evaluates it.

More information about the Beginners mailing list