Numeric literals
kahl@heraklit.informatik.unibw-muenchen.de
kahl@heraklit.informatik.unibw-muenchen.de
28 Aug 2001 12:55:01 -0000
Mark Carroll <mark@chaos.x-philes.com> wrote:
> I also haven't yet worked out how to tell if a string is "read"able or
> not, yet - if (read "45")::Integer or whatever gives an error (e.g. if I'd
> put "af" instead of "45"), it seems to be pretty uncatchable, which is a
> pain. How do I tell if an instance of reading will work, or catch that it
> didn't?
You need to resort to
reads :: Read a => ReadS a
where ReadS is a typical parser type constructor
(``replacing failure by a list of successes'', see BibTeX entry below),
defined in the prelude:
type ReadS a = String -> [(a,String)]
You might want to wrap it in something like the following:
read' :: Read a => String -> Maybe a
read' s = case reads s of
((a,[]):_) -> Just a
_ -> Nothing
For understanding the machinery it is useful to look at the
class and instance definitions for Read in the Prelude.
Wolfram
=========================================================
@InProceedings{Wadler-1985a,
author = "Philip Wadler",
title = "How to Replace Failure by a List of Successes --- {A}
Method for Exception Handling, Backtracking, and
Pattern Matching in Lazy Functional Languages",
booktitle = {Proceedings of the Second Conference on Functional
Programming Languages and Computer Architecture},
confaddress = "Nancy, France",
publisher = Springer,
series = LNCS,
confdate = SEP # " 16--19,",
year = "1985",
pages = "113--128",
}