X-Git-Url: https://gitweb.michael.orlitzky.com/?a=blobdiff_plain;f=src%2FCardinal.hs;h=3bff38f206c5983cb29ac9f80ef99275f6a88e4c;hb=ecb77f944fcba8c8cfe60ca782bc5d9c8ab68cf9;hp=9032fbdfd4312907474c9b0e4da32928a8add648;hpb=cc10c04deda3bdf54867a9052b638f0bc4b09fbe;p=spline3.git diff --git a/src/Cardinal.hs b/src/Cardinal.hs index 9032fbd..3bff38f 100644 --- a/src/Cardinal.hs +++ b/src/Cardinal.hs @@ -6,7 +6,9 @@ module Cardinal where +import Control.Monad (liftM, liftM2) import Prelude hiding (LT) +import Test.QuickCheck (Arbitrary(..), oneof) data Cardinal = F -- ^ Front | B -- ^ Back @@ -68,6 +70,46 @@ instance Fractional Cardinal where fromRational x = Scalar (fromRational x) + +instance Arbitrary Cardinal where + arbitrary = oneof [f,b,l,r,d,t,fl,fr,fd,ft,bl,br,bd,bt,ld,lt, + rd,rt,fld,flt,frd,frt,bld,blt,brd,brt,i, + scalar,csum,cdiff,cprod,cquot] + where + f = return F + b = return B + l = return L + r = return R + d = return D + t = return T + fl = return FL + fr = return FR + fd = return FD + ft = return FT + bl = return BL + br = return BR + bd = return BD + bt = return BT + ld = return LD + lt = return LT + rd = return RD + rt = return RT + fld = return FLD + flt = return FLT + frd = return FRD + frt = return FRT + bld = return BLD + blt = return BLT + brd = return BRD + brt = return BRT + i = return I + scalar = liftM Scalar arbitrary + csum = liftM2 Sum arbitrary arbitrary + cdiff = liftM2 Difference arbitrary arbitrary + cprod = liftM2 Product arbitrary arbitrary + cquot = liftM2 Quotient arbitrary arbitrary + + -- | Rotate a cardinal direction counter-clockwise about the x-axis. ccwx :: Cardinal -> Cardinal ccwx F = F