Safe Haskell | Safe-Inferred |
---|---|

Language | Haskell2010 |

- data BoundedRead a
- = NoRead
- | ExactRead a
- | ClampedRead a

- class ReadBounded a where
- readBounded :: String -> BoundedRead a

- readBoundedInteger :: (Bounded a, Read a, Integral a) => String -> BoundedRead a

# Documentation

data BoundedRead a

Information about a bounded read.

NoRead | The read failed. |

ExactRead a | The value was successfully read exactly, and did not have to be clamped to a narrower representation. |

ClampedRead a | The value was successfully read, but had to be clamped to a narrower representation because its value was too wide. |

Eq a => Eq (BoundedRead a) | |

Ord a => Ord (BoundedRead a) | |

Read a => Read (BoundedRead a) | |

Show a => Show (BoundedRead a) |

class ReadBounded a where

Much like the `Read`

class, but will return (possibly) clamped values.

Typical instances of this class will clamp against `minBound`

and `maxBound`

This class is designed to avoid inconsistency problems such as the following:

`>>>`

65`read "321" :: Word8`

`>>>`

225`read "4321" :: Word8`

`>>>`

252`read "-4" :: Word8`

Using this class, the results are predictable and precise:

`>>>`

ClampedRead 255`readBounded "321" :: BoundedRead Word8`

`>>>`

ClampedRead 255`readBounded "4321" :: BoundedRead Word8`

`>>>`

ClampedRead 0`readBounded "-4" :: BoundedRead Word8`

`>>>`

ExactRead 255`readBounded "255" :: BoundedRead Word8`

`>>>`

ExactRead 6`readBounded "6" :: BoundedRead Word8`

`>>>`

NoRead`readBounded "xxx" :: BoundedRead Word8`

readBounded :: String -> BoundedRead a

readBoundedInteger :: (Bounded a, Read a, Integral a) => String -> BoundedRead a

Reads a clamped value for any integer type with the given class constraints.
Useful for implementing a `ReadBounded`

instance or avoiding one.