[Haskell-cafe] naturally, length :: a -> Int
Henning Thielemann
lemming at henning-thielemann.de
Fri Mar 5 22:22:55 UTC 2021
On Wed, 3 Mar 2021, Olaf Klinke wrote:
> While we're at it: Can there be a Fractional type permitting only
> positive numbers, as the positive real numbers are closed under
> division? Can there be a type of rationals between 0 and 1 (which is
> closed under multiplication) where (/x) is the right adjoint to (*x)?
Once I defined a wrapper for numbers that (morally) restricts the value
range to non-negative values:
http://hackage.haskell.org/package/non-negative
However, it turned out to be impractical. It is incompatible with its base
number type. If you have even more variants for positive numbers, for
numbers in the range [0,1] you will do more conversions than computations.
I found the LiquidHaskell approach convincing: You have a base type and
add constraints on the value range. You could assign a [0,1]-value to a
non-negative value without conversion, because LiquidHaskell would ask Z3
and Z3 would confirm that a [0,1]-value is always non-negative.
More information about the Haskell-Cafe
mailing list