Name: Anonymous 2008-06-04 10:39
GO!
import Control.Monad.Identity
factorial n | n < 0 = fail "factorial: negative argument."
| otherwise = return $ product [1..n]
fact = runIdentity . factorial