Thanks you very much.

On 05/12/17 16:17, michael.norr...@data61.csiro.au wrote:
I’m afraid it depends.

There are at least three different options.

The obvious one is to use an option type in the range. This makes everything 
very explicit, but can be quite ugly.

Another approach is to just use the normal function space, knowing that you 
will have the intended domain provided “at some distance”.  For example, define 
a monoid type:

   <| carrier : α set; opn : α -> α -> α; id: α |>

The third approach would more explicitly tie the domain into the type 
representing the function value so that you might write

   type_abbrev (“fn”, ``:(α -> β) # (α set)``)

If manipulating such values, you’d end up wanting to define what it means to 
apply these, to compose them etc. I don’t know of any serious attempts to 
follow this sort of approach through.

Michael

------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
hol-info mailing list
hol-info@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/hol-info

Reply via email to