License | BSD3 |
---|---|
Maintainer | The Idris Community. |
Safe Haskell | None |
Language | Haskell2010 |
Synopsis
- buildSCG :: (FC, Name) -> Idris ()
- checkAllCovering :: FC -> [Name] -> Name -> Name -> Idris ()
- checkDeclTotality :: (FC, Name) -> Idris Totality
- checkIfGuarded :: Name -> Idris ()
- checkPositive :: [Name] -> (Name, Type) -> Idris Totality
- checkSizeChange :: Name -> Idris Totality
- verifyTotality :: (FC, Name) -> Idris ()
Documentation
buildSCG :: (FC, Name) -> Idris () Source #
Calculate the size change graph for this definition
SCG for a function f consists of a list of: (g, [(a1, sizechange1), (a2, sizechange2), ..., (an, sizechangen)])
where g is a function called a1 ... an are the arguments of f in positions 1..n of g sizechange1 ... sizechange2 is how their size has changed wrt the input to f Nothing, if the argument is unrelated to the input
checkAllCovering :: FC -> [Name] -> Name -> Name -> Idris () Source #
Check whether function and all descendants cover all cases (partial is okay, as long as it's due to recursion)
checkIfGuarded :: Name -> Idris () Source #
Check whether all Inf
arguments to the name end up guaranteed to be
guarded by constructors (conservatively... maybe this can do better later).
Essentially, all it does is check that every branch is a constructor application
with no other function applications.
If so, set the AllGuarded
flag which can be used by the productivity check
Check if, in a given group of type declarations mut_ns, the constructor cn : ty is strictly positive, and update the context accordingly