Popularity
2.8
Declining
Activity
0.0
Stable
1
4
0

License: BSD 3-clause "New" or "Revised" License
Tags: Control     Safe

# lawful alternatives and similar packages

Based on the "safe" category.
Alternatively, view lawful alternatives based on common mentions on social networks and blogs.

• ### gdp

Ghosts of Departed Proofs
• ### safe-exceptions-checked

DISCONTINUED. Safe, checked exceptions
• ### InfluxDB - Power Real-Time Data Analytics at Scale

Get real-time insights from all types of time series data with InfluxDB. Ingest, query, and analyze billions of data points in real-time with unbounded cardinality.
Promo www.influxdata.com

A monadic buffer resilient to exceptions

Do you think we are missing an alternative of lawful or a related project?

## What is this package for?

This small library provides a single two-parameter typeclass `Lawful c t`, where `c` is a typeclass and `t` is a type. Declaring an instance of `Lawful C T` is an assertion that "the instance for `C T` obeys the laws of the class `C` (whatever that means!)"

For example, a lawful instance of `Eq T` should satisfy the reflexive law `x == x` for all `x :: T`. This is certainly true for most types, such as `Int` or `[a]` when `Eq a` is lawful, so we can define

``````Lawful Eq Int
Lawful Eq a => Lawful Eq [a]
``````

But it isn't true for `Double`:

``````λ> nan = 0 / 0 :: Double
λ> nan == nan
False

``````

## Why is there a `c t` constraint on `Lawful c t`?

This constraint lets you use a `Lawful c t` wherever a `c t` would be expected, as in:

``````same :: Lawful Eq a => a -> a -> Bool
same x y = x == y
``````

## How do I know what laws are expected from a typeclass?

If everybody more-or-less agrees on what the right laws are, hopefully they bothered to write them down somewhere. If they didn't, then sorry! You're on your own!

## Shouldn't all typeclass instances be lawful anyway, making this package useless?

Wouldn't that be nice?