Io Работает С Кучей Haskell

Начало серии Хаскель-куча В этой статье мы остановимся на ты .

Вы продолжаете торчать вокруг стопки Haskell и пытаетесь открыть подарок.

Ведь подарки не открываются сами по себе.



IO работает с кучей Haskell

Кто-то должен открыть первый подарок.



IO работает с кучей Haskell

Если куча Haskell не взаимодействует с внешним миром, то подарки открывать не нужно.

Следовательно, это будут делать только функции ввода-вывода.

Не всегда очевидно, какой именно подарок откроет функция.

Итак, давайте посмотрим на самый простой оценивать .

Который тебя спрашивает.

IO работает с кучей Haskell

.

просто откройте подарок.

Если у вас примитивный смысл, то все.

Но вы можете получить подарочный сертификат (конструктор):

IO работает с кучей Haskell

Будете ли вы открывать подарки на его основе? Несмотря на ваше горячее желание, ответ — нет. оценивать просит открыть только один подарок.

А если он уже открыт, то вообще ничего делать не нужно.



IO работает с кучей Haskell

Совет: если вы хотите узнать больше, создайте подарок с духом, который сделает всю работу за вас! Часто приводят такой пример ленивых вычислений ввода-вывода: оценить (длина xs) .

Но не волнуйтесь слишком сильно, если вы еще этого не понимаете: я еще не рассказал вам, как создавать подарки!

Хотя мы открываем только один подарок, может случиться многое.

Об этом я писал в предыдущей статье.

Может возникнуть некоторый IO (побочный эффект).



IO работает с кучей Haskell

Побочные эффекты позволяют подсмотреть порядок вычислений.

Ведь если мы запустим программу обычным способом, мы не увидим, когда подарок будет открыт. Но если мы попросим дух кричать, когда его потревожат, то мы об этом узнаем.

На самом деле, это именно то, что он делает Debug.Trace !

IO работает с кучей Haskell

Есть и другие способы узнать, как идут расчеты.

Подарок может взорваться, если его заминировать.

Шахты еще называют «дном» (логическое противоречие).



IO работает с кучей Haskell

Возможно, взрыв был вызван неопределенный или ошибка "Фубар" .



IO работает с кучей Haskell

Бум.

Закончим несколькими практическими советами.

Как мы видели, быть уверенным в том, что подарок открыт, можно только в том случае, если вы явно запросите его в IO. В противном случае дух может вас обмануть.

Ведь вы не можете напрямую видеть связка Хаскеля, поэтому прямого способа узнать открыт подарок или нет нет.

IO работает с кучей Haskell

Если вы не уверены, что thunk оценивается, прикрепите к нему трассировку.

А если духи ленятся за вашей спиной, то розыск не получится.



IO работает с кучей Haskell

Но чаще всего след вы все равно увидите, пусть и позже, чем ожидалось (духи ленивы, но свое дело со временем сделают).

Может быть полезно досрочно выйти из программы или распечатать завершенные этапы расчетов.

Последний раз: Вычисление кучи Haskell В следующий раз: Реализация кучи Haskell в Python, v1 Комментарий.

Вопреки тому, что я сказал ранее, теоретически ничто не мешает вам выполнять переходы в куче в любом порядке: это называется умозрительный расчет .

Кроме того, сами действия ввода-вывода могут быть преобразователями, что соответствует передаче значения ( ИО а ) без фактического «запуска» его.

Но поскольку я здесь не ради монад, я просто не буду обращать внимание на подарки от ИО действия — там все работает так же, только добавляется еще один уровень косвенности.

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

Теги: #haskell #heap #ленивое выполнение #ghc #haskell #heap #ленивые вычисления #haskell

Вместе с данным постом часто просматривают:

Автор Статьи


Зарегистрирован: 2019-12-10 15:07:06
Баллов опыта: 0
Всего постов на сайте: 0
Всего комментарий на сайте: 0
Dima Manisha

Dima Manisha

Эксперт Wmlog. Профессиональный веб-мастер, SEO-специалист, дизайнер, маркетолог и интернет-предприниматель.