Generalize `E{0,1,2,3,6,9,12}` from `Data.Fixed`
Hello;
I'm creating this email to propose a change to Data.Fixed
. Full credit for this idea goes to Bhavik Mehta (@b-mehta on GitHub), who implemented it in this PR for exact-pi
.
In Data.Fixed
there are several E
-prefixed datatypes used to represent a certain number of digits of precision in fixed-precision arithmetic. For example, E1
has 1 decimal place, E12
has 12. Each of them, E{0,1,2,3,6,9,12}
is hardcoded. If more precision types are to be provided, they have to be hardcoded as well, and all of these types resemble each other. I think there is room for improvement here.
Instead of having
data E0
instance HasResolution E0 where
resolution _ = 1
and repeating it as many times as there are E
datatypes, I propose to add the following type:
{-# LANGUAGE DataKinds #-}
{-# LANGUAGE KindSignatures #-}
import GHC.TypeLits (Nat, KnownNat, natVal)
data E (n :: Nat)
and then do
instance KnownNat n => HasResolution (E n) where
resolution _ = 10^natVal (undefined :: E n)
just once, replacing data E0
with type E0 = E 0
(and the same for the rest of them) to continue reexporting these types. E
should also be exported.
I've sent an email to the Core Libraries Committee regarding this issue. This is my first contribution to GHC, if I'm doing something incorrectly please tell me.
Trac metadata
Trac field | Value |
---|---|
Version | 8.4.3 |
Type | FeatureRequest |
TypeOfFailure | OtherFailure |
Priority | normal |
Resolution | Unresolved |
Component | Core Libraries |
Test case | |
Differential revisions | |
BlockedBy | |
Related | |
Blocking | |
CC | Bodigrim |
Operating system | |
Architecture |