Add missing totality annotations

This commit is contained in:
Fabián Heredia Montiel 2020-05-25 10:05:12 -05:00 committed by G. Allais
parent fd58d25783
commit 97366f022d
47 changed files with 111 additions and 15 deletions

View File

@ -4,6 +4,8 @@ import public Algebra.ZeroOneOmega
import public Algebra.Semiring
import public Algebra.Preorder
%default total
public export
RigCount : Type
RigCount = ZeroOneOmega

View File

@ -1,5 +1,7 @@
module Algebra.Preorder
%default total
||| Preorder defines a binary relation using the `<=` operator
public export
interface Preorder a where

View File

@ -3,6 +3,8 @@ module Algebra.ZeroOneOmega
import Algebra.Semiring
import Algebra.Preorder
%default total
export
data ZeroOneOmega = Rig0 | Rig1 | RigW

View File

@ -22,6 +22,8 @@ import System.Directory
import System.Info
import System.File
%default covering
||| Generic interface to some code generator
public export
record Codegen where

View File

@ -1,6 +1,8 @@
||| Utilities functions for contitionally delaying values.
module Control.Delayed
%default total
||| Type-level function for a conditionally infinite type.
public export
inf : Bool -> Type -> Type

View File

@ -15,7 +15,7 @@ import System.Directory
import System.File
import System.Info
%default covering
%default total
-- Return the name of the first file available in the list
firstAvailable : List String -> Core (Maybe String)
@ -27,6 +27,7 @@ firstAvailable (f :: fs)
pure (Just f)
export
covering
readDataFile : {auto c : Ref Ctxt Defs} ->
String -> Core String
readDataFile fname
@ -101,6 +102,7 @@ dirExists dir = do Right d <- openDir dir
-- Create subdirectories, if they don't exist
export
covering
mkdirAll : String -> IO (Either FileError ())
mkdirAll dir = if parse dir == emptyPath
then pure (Right ())
@ -115,6 +117,7 @@ mkdirAll dir = if parse dir == emptyPath
-- Given a namespace (i.e. a module name), make the build directory for the
-- corresponding ttc file
export
covering
makeBuildDirectory : {auto c : Ref Ctxt Defs} ->
List String -> Core ()
makeBuildDirectory ns
@ -127,6 +130,7 @@ makeBuildDirectory ns
pure ()
export
covering
makeExecDirectory : {auto c : Ref Ctxt Defs} ->
Core ()
makeExecDirectory
@ -175,6 +179,7 @@ dirEntries dir
-- returns the directory, the ipkg file name, and the directories we've
-- gone up
export
covering
findIpkgFile : IO (Maybe (String, String, String))
findIpkgFile
= do Just dir <- currentDir
@ -182,6 +187,7 @@ findIpkgFile
res <- findIpkgFile' dir ""
pure res
where
covering
findIpkgFile' : String -> String -> IO (Maybe (String, String, String))
findIpkgFile' dir up
= do Right files <- dirEntries dir

View File

@ -3,6 +3,8 @@ module Core.Env
import Core.TT
import Data.List
%default total
-- Environment containing types and values of local variables
public export
data Env : (tm : List Name -> Type) -> List Name -> Type where

View File

@ -1,5 +1,7 @@
module Core.FC
%default total
public export
FilePos : Type
FilePos = (Int, Int)

View File

@ -10,10 +10,10 @@ import Core.TT
import Core.TTC
import Data.List
import System.File
import Utils.Binary
import System.File
%default covering
-- Additional data we keep about the context to support interactive editing

View File

@ -11,6 +11,8 @@ import Data.Strings
import System.Info
%default total
public export
record Dirs where
constructor MkDirs

View File

@ -7,6 +7,8 @@ import Core.TT
import Data.NameMap
%default total
unload : List (FC, Term vars) -> Term vars -> Term vars
unload [] fn = fn
unload ((fc, arg) :: args) fn = unload args (App fc fn arg)
@ -35,7 +37,7 @@ addMatch idx p val ms
else Nothing
-- LHS of a rule must be a function application, so there's not much work
-- to do here!
-- to do here!
match : MatchVars vars vs ->
Term vars -> Term vs -> Maybe (MatchVars vars vs)
match ms (Local _ _ idx p) val
@ -48,6 +50,7 @@ match ms x y
then Just ms
else Nothing
covering
tryReplace : MatchVars vars vs -> Term vars -> Maybe (Term vs)
tryReplace ms (Local _ _ idx p) = lookupMatch idx p ms
tryReplace ms (Ref fc nt n) = pure (Ref fc nt n)
@ -80,6 +83,7 @@ tryReplace ms (PrimVal fc c) = pure (PrimVal fc c)
tryReplace ms (Erased fc i) = pure (Erased fc i)
tryReplace ms (TType fc) = pure (TType fc)
covering
tryApply : Transform -> Term vs -> Maybe (Term vs)
tryApply trans@(MkTransform {vars} n _ lhs rhs) tm
= case match None lhs tm of
@ -100,6 +104,7 @@ apply (t :: ts) tm
data Upd : Type where
covering
trans : {auto c : Ref Ctxt Defs} ->
{auto u : Ref Upd Bool} ->
Env Term vars -> List (FC, Term vars) -> Term vars ->
@ -135,6 +140,7 @@ trans env stk (TForce fc r tm)
pure $ unload stk (TForce fc r tm')
trans env stk tm = pure $ unload stk tm
covering
transLoop : {auto c : Ref Ctxt Defs} ->
Nat -> Env Term vars -> Term vars -> Core (Term vars)
transLoop Z env tm = pure tm
@ -148,6 +154,7 @@ transLoop (S k) env tm
else pure tm'
export
covering
applyTransforms : {auto c : Ref Ctxt Defs} ->
Env Term vars -> Term vars -> Core (Term vars)
applyTransforms env tm = transLoop 5 env tm

View File

@ -7,6 +7,8 @@ import Core.TT
import Data.IntMap
%default covering
public export
record EvalOpts where
constructor MkEvalOpts

View File

@ -7,6 +7,8 @@ import Data.List
import Data.NameMap
import Data.StringMap
%default total
export
record ANameMap a where
constructor MkANameMap

View File

@ -1,5 +1,7 @@
module Data.Bool.Extra
%default total
public export
andSameNeutral : (x : Bool) -> x && x = x
andSameNeutral False = Refl

View File

@ -2,7 +2,7 @@ module Data.IntMap
-- Hand specialised map, for efficiency...
%default covering
%default total
Key : Type
Key = Int

View File

@ -1,5 +1,7 @@
module Data.LengthMatch
%default total
public export
data LengthMatch : List a -> List b -> Type where
NilMatch : LengthMatch [] []

View File

@ -1,6 +1,6 @@
module Data.List.Extra
%default covering
%default total
||| Fetches the element at a given position.
||| Returns `Nothing` if the position beyond the list's end.

View File

@ -4,7 +4,7 @@ import Core.Name
-- Hand specialised map, for efficiency...
%default covering
%default total
Key : Type
Key = Name

View File

@ -2,7 +2,7 @@ module Data.StringMap
-- Hand specialised map, for efficiency...
%default covering
%default total
Key : Type
Key = String

View File

@ -23,6 +23,8 @@ import Data.ANameMap
import Data.List
import Data.Maybe
%default covering
-- TODO: Check all the parts of the body are legal
-- TODO: Deal with default superclass implementations

View File

@ -6,7 +6,7 @@ import public Idris.REPLOpts
import System.File
%default covering
%default total
public export
data SExp = SExpList (List SExp)
@ -186,7 +186,7 @@ escape = pack . concatMap escapeChar . unpack
export
Show SExp where
show (SExpList xs) = "(" ++ showSep " " (map show xs) ++ ")"
show (SExpList xs) = assert_total $ "(" ++ showSep " " (map show xs) ++ ")"
show (StringAtom str) = "\"" ++ escape str ++ "\""
show (BoolAtom b) = ":" ++ show b
show (IntegerAtom i) = show i

View File

@ -7,14 +7,16 @@ import Idris.Syntax
import Idris.IDEMode.Commands
%default covering
public export
record HolePremise where
constructor MkHolePremise
name : Name
type : PTerm
multiplicity : RigCount
multiplicity : RigCount
isImplicit : Bool
public export
record HoleData where
@ -25,7 +27,7 @@ record HoleData where
||| If input is a hole, return number of locals in scope at binding
||| point
export
export
isHole : GlobalDef -> Maybe Nat
isHole def
= case definition def of

View File

@ -8,6 +8,8 @@ import Data.List
import Data.Nat
import Data.Strings
%default total
-- Implement make-with and make-case from the IDE mode
showRHSName : Name -> String

View File

@ -14,6 +14,8 @@ import Text.Parser
import Utils.Either
import Utils.String
%default total
%hide Text.Lexer.symbols
%hide Parser.Lexer.Source.symbols
@ -42,6 +44,7 @@ idelex str
Comment _ => False
_ => True
covering
sexp : Rule SExp
sexp
= do symbol ":"; exactIdent "True"
@ -67,6 +70,7 @@ ideParser str p
export
covering
parseSExp : String -> Either (ParseError Token) SExp
parseSExp inp
= ideParser inp (do c <- sexp; eoi; pure c)

View File

@ -45,6 +45,8 @@ import System.File
import Network.Socket
import Network.Socket.Data
%default covering
%foreign "C:fdopen,libc 6"
prim__fdopen : Int -> String -> PrimIO AnyPtr

View File

@ -10,6 +10,8 @@ import Idris.IDEMode.Commands
import Data.List
%default covering
data Decoration : Type where
Typ : Decoration
Function : Decoration

View File

@ -4,6 +4,8 @@ module Idris.IDEMode.TokenLine
import Parser.Lexer.Source
import Text.Lexer
%default total
public export
RawName : Type
RawName = String

View File

@ -28,6 +28,8 @@ import Data.NameMap
import System.File
%default covering
processDecl : {auto c : Ref Ctxt Defs} ->
{auto u : Ref UST UState} ->
{auto s : Ref Syn SyntaxInfo} ->

View File

@ -13,6 +13,8 @@ import Idris.Syntax
import Data.List
%default covering
-- Output informational messages, unless quiet flag is set
export
iputStrLn : {auto o : Ref ROpts REPLOpts} ->

View File

@ -5,6 +5,8 @@ import Idris.Syntax
import Data.Strings
import System.File
%default total
public export
data OutputMode
= IDEMode Integer File File

View File

@ -17,6 +17,8 @@ import IdrisPaths
import Data.So
import System
%default covering
-- TODO: Version numbers on dependencies
export
addPkgDir : {auto c : Ref Ctxt Defs} ->

View File

@ -4,6 +4,8 @@ module Idris.Version
import IdrisPaths
import Data.List
%default total
||| Semantic versioning with optional tag
||| See [semver](https://semver.org/) for proper definition of semantic versioning
public export

View File

@ -9,6 +9,8 @@ import public Parser.Support
import System.File
import Utils.Either
%default total
export
runParser : String -> Rule ty -> Either (ParseError Token) ty
runParser str p
@ -17,6 +19,7 @@ runParser str p
Right (fst parsed)
export
covering
parseFile : (fn : String) -> Rule ty -> IO (Either (ParseError Token) ty)
parseFile fn p
= do Right str <- readFile fn

View File

@ -19,6 +19,8 @@ import Data.IntMap
import Data.List
import Data.NameMap
%default covering
findPLetRenames : {vars : _} ->
Term vars -> List (Name, (RigCount, Name))
findPLetRenames (Bind fc n (PLet c (Local _ _ idx p) ty) sc)

View File

@ -21,6 +21,8 @@ import Data.List
import Data.NameMap
import Data.StringMap
%default covering
public export
data ElabMode = InType | InLHS RigCount | InExpr | InTransform

View File

@ -10,6 +10,8 @@ import Core.Value
import TTImp.Elab.Check
import TTImp.TTImp
%default covering
detagSafe : Defs -> NF [] -> Core Bool
detagSafe defs (NTCon _ n _ _ args)
= do Just (TCon _ _ _ _ _ _ _ (Just detags)) <- lookupDefExact n (gamma defs)

View File

@ -10,6 +10,8 @@ import TTImp.TTImp
import Data.List
%default covering
-- This file contains support for building a guess at the term on the LHS of an
-- 'impossible' case, in order to help build a tree of covered cases for
-- coverage checking. Since the LHS by definition won't be well typed, we are

View File

@ -18,6 +18,8 @@ topDecl : FileName -> IndentInfo -> Rule ImpDecl
export
collectDefs : List ImpDecl -> List ImpDecl
%default covering
%hide Prelude.(>>=)
%hide Core.Core.(>>=)
%hide Prelude.pure

View File

@ -24,6 +24,8 @@ import Data.List
import Data.Maybe
import Data.NameMap
%default covering
-- Implements processDecl, declared in TTImp.Elab.Check
process : {vars : _} ->
{auto c : Ref Ctxt Defs} ->

View File

@ -30,6 +30,8 @@ import Data.Either
import Data.List
import Data.NameMap
%default covering
mutual
mismatchNF : {vars : _} ->
Defs -> NF vars -> NF vars -> Core Bool

View File

@ -17,6 +17,8 @@ import TTImp.Utils
import Data.List
%default covering
mkDataTy : FC -> List (Name, RigCount, PiInfo RawImp, RawImp) -> RawImp
mkDataTy fc [] = IType fc
mkDataTy fc ((n, c, p, ty) :: ps)

View File

@ -12,6 +12,8 @@ import TTImp.Elab.Check
import TTImp.ProcessDef -- for checking LHS
import TTImp.TTImp
%default covering
export
processTransform : {vars : _} ->
{auto c : Ref Ctxt Defs} ->

View File

@ -7,6 +7,8 @@ import TTImp.TTImp
import Data.List
%default covering
matchFail : FC -> Core a
matchFail loc = throw (GenericMsg loc "With clause does not match parent")

View File

@ -1,5 +1,7 @@
module Utils.Either
%default total
export
mapError : (a -> c) -> Either a b -> Either c b
mapError f e = either (Left . f) (Right . id) e

View File

@ -2,6 +2,8 @@ module Utils.Hex
import Data.Primitives.Views
%default total
hexDigit : Int -> Char
hexDigit 0 = '0'
hexDigit 1 = '1'
@ -29,7 +31,8 @@ asHex n = pack $ asHex' n []
asHex' : Int -> List Char -> List Char
asHex' 0 hex = hex
asHex' n hex with (n `divides` 16)
asHex' (16 * div + rem) hex | DivBy div rem _ = asHex' div (hexDigit rem :: hex)
asHex' (16 * div + rem) hex | DivBy div rem _ =
assert_total $ asHex' div (hexDigit rem :: hex)
export
fromHexDigit : Char -> Maybe Int

View File

@ -2,6 +2,8 @@ module Utils.Octal
import Data.Primitives.Views
%default total
octDigit : Int -> Char
octDigit 0 = '0'
octDigit 1 = '1'
@ -21,7 +23,8 @@ asOct n = pack $ asOct' n []
asOct' : Int -> List Char -> List Char
asOct' 0 oct = oct
asOct' n oct with (n `divides` 8)
asOct' (8 * div + rem) oct | DivBy div rem _ = asOct' div (octDigit rem :: oct)
asOct' (8 * div + rem) oct | DivBy div rem _ =
assert_total $ asOct' div (octDigit rem :: oct)
export
fromOctDigit : Char -> Maybe Int

View File

@ -25,6 +25,8 @@ import Data.So
import Data.Strings
import System
%default covering
usage : String
usage = "Usage: yaffle <input file> [--timing]"