-
Notifications
You must be signed in to change notification settings - Fork 2
/
FieldIsPID.hs
36 lines (27 loc) · 1.26 KB
/
FieldIsPID.hs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
{-# LANGUAGE CPP, NoImplicitPrelude #-}
module FieldIsPID where
import NumericPrelude
import qualified Algebra.PrincipalIdealDomain as PID
import qualified Algebra.Field as Field
import qualified Algebra.Units as Units
import qualified Algebra.IntegralDomain as Domain
import qualified Number.Ratio as Ratio
-- I want fields to be PIDS
#define FIELDISDOMAIN(Context, FieldType) \
instance (Context) => Domain.C (FieldType) where { divMod x y = (x/y,zero) }
#define FIELDISUNIT(Context,FieldType) \
instance (Context) => Units.C (FieldType) where { \
isUnit _ = True; \
stdUnitInv = (one/) \
} \
#define FIELDISPID(Context,FieldType) \
instance (Context) => PID.C (FieldType) where { \
extendedGCD x y = (one,(one/(x+y),one/(x+y))); \
gcd x y = one; \
lcm x y = one }
FIELDISDOMAIN(,Double)
FIELDISUNIT(,Double)
FIELDISPID(,Double)
FIELDISDOMAIN(PID.C t,Ratio.T t)
FIELDISUNIT(PID.C t,Ratio.T t)
FIELDISPID(PID.C t,Ratio.T t)