Вот Идрис синтаксически очень похож на хаскель, однако не ленивый. В хаскеле ленивость-по-умолчанию сопровождается строгостью-по-запросу, добавшяешь перед полем значок ! и оно строгое. Оказывается, в Идрисе нынче есть симметричная штука: добавляешь перед типом поля волшебное слово Inf, и поле оказывается "ленивым": когда данные конструируются,
(
Read more... )
Comments 7
(The comment has been removed)
Reply
Reply
Это же вопрос исключительно реализации Delay (возвращает ли она простую санку или мемоизирующую обертку, желательно с поддержкой на уровне рантайма).
Reply
# let x = lazy (print_string "Х"; 2) in Lazy.force x + Lazy.force x;;
Х- : int = 4
А в Идрисе почему-то нет. То ли поленинись правильно лениться, то ли в рантайме все настолько иммутабельно, что добавить изменение санок вызывает трудности.
Reply
CoFixpoint fib (a b: nat) : Stream nat := Cons a (fib b (a + b)).
#trollface
Reply
f : Nat -> Nat -> Stream Nat
f a b = a :: f b (a + b)
Reply
codata Stream : Type -> Type where
(::) : (e : a) -> Stream a -> Stream a
которое рассахаривается в то, что в посте
(еще есть Lazy, которое совсем как Inf, но считается структурно "сходящимся")
Reply
Leave a comment