Partial Function Pattern
module partial_template where
{- TODO: describe the difference between data and
record without using terms like eta-equality and
beta-reduction -}
data FalseSet : Set where
record TrueSet : Set where
data Bool : Set where
False : Bool
True : Bool
boolid : Bool -> Bool
boolid a = a
_IsTrue : Bool -> Set
True IsTrue = TrueSet
False IsTrue = FalseSet
{- The hidden argument is only defined where the argument
is true. Since the alternative part of the domain
(where the argument is false) doesn't provide any value
for the "IsTrue" test, the function as a whole is still
total -}
only_applied_to_true : (a : Bool) -> {_ : (boolid a) IsTrue} -> Bool
only_applied_to_true True = True
only_applied_to_true False {} {- This clause is absurd but it needn't be
this clause is protected by the hidden argument and can't ever happen -}
good = only_applied_to_true True
fail = only_applied_to_true False
Page last modified on April 16, 2008, at 12:58 pm
Powered by
PmWiki