Bool
data A = X | Y
a :: Quest Bool A a = Quest (\h -> if h X then X else Y)
aa :: Quest Bool (A, A) aa = liftM2 (,) a a
data Stream = Stream A Stream
stream :: Quest Bool Stream stream = liftM2 Stream a stream
[ Home | Post Entry | Log in | Search | Browse Options | Site Map ]
no subject
Пусть наша "хорошесть" — это просто
Bool
, в смысле "подходит/не подходит". Для конечного типа можно сделать совершенно точную поисковую функцию: Конечно, если наш критерий не выполняется никогда, то мы получим не подходящий ответ; но это лучшее, что мы можем сделать.Для пар точная поисковая функция делается очень просто: А теперь берём потоки: и определяем поисковую функцию: Самое смешное, что это работает. Но! Если наш критерий — тотальная функция. Тогда поиск найдёт нам то, что надо.