Тип объединения несвязанных функций? - PullRequest
2 голосов
/ 24 марта 2019

Дано две функции:

f :: EvenInteger -> {0}
g :: OddInteger -> {1}

рассмотрим функцию

h = (x :: Integer) => {
    if(x is even)return f(x);
    return g(x);
}

Какой самый маленький тип Т такой, что

h :: T

Я думал, что это просто

h :: (typeof f) & (typeof g)

Но тогда я бы также подумал, что вызов функции распределяется по соединению, т.е.

x :: EvenInteger
h(x) :: (typeof f(x)) & (typeof g(x))

, который вызывает другой вопрос:

Что такое

(OddInteger -> {1})(EvenInteger)
...