@@ -335,8 +335,9 @@ total natEnumFromThen : Nat -> Nat -> Stream Nat
335natEnumFromThen n inc = n :: natEnumFromThen (inc + n) inc
335natEnumFromThen n inc = n :: natEnumFromThen (inc + n) inc
336total natEnumFromTo : Nat -> Nat -> List Nat
336total natEnumFromTo : Nat -> Nat -> List Nat
337natEnumFromTo n m = map (plus n) (natRange ((S m) - n))
337natEnumFromTo n m = map (plus n) (natRange ((S m) - n))
338−partial natEnumFromThenTo : Nat -> Nat -> Nat -> List Nat
338+total natEnumFromThenTo : Nat -> Nat -> Nat -> List Nat
339+natEnumFromThenTo _ Z _ = []
339−natEnumFromThenTo n inc m = map (plus n . (* inc)) (natRange (S ((m - n) `div` inc)))
340+natEnumFromThenTo n (S inc) m = map (plus n . (* (S inc))) (natRange (S (divNatNZ (m - n) (S inc) SIsNotZ)))
341class Enum a where
342class Enum a where
342 total pred : a -> a
343 total pred : a -> a
@@ -350,7 +351,7 @@ class Enum a where
350 enumFromThen x y = map fromNat (natEnumFromThen (toNat x) (toNat y))
351 enumFromThen x y = map fromNat (natEnumFromThen (toNat x) (toNat y))
351 total enumFromTo : a -> a -> List a
352 total enumFromTo : a -> a -> List a
352 enumFromTo x y = map fromNat (natEnumFromTo (toNat x) (toNat y))
353 enumFromTo x y = map fromNat (natEnumFromTo (toNat x) (toNat y))
353− partial enumFromThenTo : a -> a -> a -> List a
354+ total enumFromThenTo : a -> a -> a -> List a
354 enumFromThenTo x1 x2 y = map fromNat (natEnumFromThenTo (toNat x1) (toNat x2) (toNat y))
355 enumFromThenTo x1 x2 y = map fromNat (natEnumFromThenTo (toNat x1) (toNat x2) (toNat y))
356instance Enum Nat where
357instance Enum Nat where
@@ -375,7 +376,7 @@ instance Enum Integer where
375 go [] = []
376 go [] = []
376 go (x :: xs) = n + cast x :: go xs
377 go (x :: xs) = n + cast x :: go xs
377 enumFromThenTo _ 0 _ = []
378 enumFromThenTo _ 0 _ = []
378− enumFromThenTo n inc m = go (natRange (S (fromInteger (abs (m - n)) `div` fromInteger (abs inc))))
379+ enumFromThenTo n inc m = go (natRange (S (divNatNZ (fromInteger (abs (m - n))) (S (fromInteger ((abs inc) - 1))) SIsNotZ)))
379 where go : List Nat -> List Integer
380 where go : List Nat -> List Integer
380 go [] = []
381 go [] = []
381 go (x :: xs) = n + (cast x * inc) :: go xs
382 go (x :: xs) = n + (cast x * inc) :: go xs
@@ -395,7 +396,7 @@ instance Enum Int where
395 go acc (S k) m = go (m :: acc) k (m - 1)
396 go acc (S k) m = go (m :: acc) k (m - 1)
396 enumFromThen n inc = n :: enumFromThen (inc + n) inc
397 enumFromThen n inc = n :: enumFromThen (inc + n) inc
397 enumFromThenTo _ 0 _ = []
398 enumFromThenTo _ 0 _ = []
398− enumFromThenTo n inc m = go (natRange (S (cast {to=Nat} (abs (m - n)) `div` cast {to=Nat} (abs inc))))
399+ enumFromThenTo n inc m = go (natRange (S (divNatNZ (cast {to=Nat} (abs (m - n))) (S (cast {to=Nat} ((abs inc) - 1))) SIsNotZ)))
399 where go : List Nat -> List Int
400 where go : List Nat -> List Int
400 go [] = []
401 go [] = []
401 go (x :: xs) = n + (cast x * inc) :: go xs
402 go (x :: xs) = n + (cast x * inc) :: go xs