on master help sign in
Add Data.Integer.Views
commit8805b35a1e1aecb0a50b8cef3ab56a50a7449cb8 authorEdwin Brady <ecb10@st-andrews.ac.uk> dateTue 17 May 2016, 15:38 (10 years ago) parentfc9490e
3 files changed+21
idris.cabal+1 libs/base/Data/Integer/Views.idr+19 libs/base/base.ipkg+1
idris.cabal+1
@@ -115,6 +115,7 @@ Extra-source-files:
115115 libs/base/Control/Monad/*.idr
116116 libs/base/Data/*.idr
117117 libs/base/Data/Nat/*.idr
118+ libs/base/Data/Integer/*.idr
118119 libs/base/Data/List/*.idr
119120 libs/base/Data/Vect/*.idr
120121 libs/base/Data/String/*.idr
libs/base/Data/Integer/Views.idrnew file+19
@@ -0,0 +1,19 @@
1+module Data.Nat.Views
2+
3+||| View for expressing a number as a multiplication + a remainder
4+public export
5+data Divides : Integer -> (d : Integer) -> Type where
6+ DivByZero : Divides x 0
7+ DivBy : (prf : rem >= 0 && rem < d = True) ->
8+ Divides ((d * div) + rem) d
9+
10+||| Covering function for the `Divides` view
11+export
12+divides : (val : Integer) -> (d : Integer) -> Divides val d
13+divides val 0 = DivByZero
14+divides val d
15+ = let dividend = if d < 0 then -(val `div` abs d)
16+ else val `div` d
17+ remainder = val `mod` d in
18+ believe_me (DivBy {d} {div = dividend} {rem = remainder}
19+ (believe_me (Refl {x = True})))
libs/base/base.ipkg+1
@@ -19,6 +19,7 @@ modules = System,
1919 Data.Erased, Data.List, Data.List.Views,
2020 Data.List.Quantifiers,
2121 Data.Nat.Views,
22+ Data.Integer.Views,
2223 Data.String.Views,
2324 Data.So, Data.String,
2425