//@NO-IMPLICIT-PRELUDE //! The 64-bit floating point type. let { Semigroup, Monoid, Group, Eq, Ord, Ordering, Num, Show } = import! std.prelude let additive = let semigroup : Semigroup Float = { append = \x y -> x #Float+ y } let monoid : Monoid Float = { semigroup = semigroup, empty = 0.0, } let group : Group Float = { monoid = monoid, inverse = \x -> 0.0 #Float- x, } { semigroup, monoid, group } let multiplicative = let semigroup : Semigroup Float = { append = \x y -> x #Float* y } let monoid : Monoid Float = { semigroup = semigroup, empty = 1.0, } let group : Group Float = { monoid = monoid, inverse = \x -> 1.0 #Float/ x, } { semigroup, monoid, group } let eq : Eq Float = { (==) = \l r -> l #Float== r, } let ord : Ord Float = { eq = eq, compare = \l r -> if l #Float< r then LT else if l #Float== r then EQ else GT, } let num : Num Float = { ord = ord, (+) = additive.semigroup.append, (-) = \l r -> l #Float- r, (*) = multiplicative.semigroup.append, (/) = \l r -> l #Float/ r, negate = additive.group.inverse, } let show : Show Float = { show = (import! std.prim).show_float, } { additive, multiplicative, eq, ord, num, show, .. import! std.float.prim }