Alexander
> почему функции будут делать глупое? f a b = f b a не так и много, если хочется сделать так чтобы сделать из обычной функции такую, то она должна делать что-то глупое, чтобы вернуть информацию
Alexander
> то есть класс чистых функций по мощности выполнимых задач эквивалентен чистым коммутативным? мне это неочевидно
Alexander
но самое главное, что затея глупая от основания, т.к. исходит из неправильных предположений
Alexander
т.е. неясна проблема какую мы хотим решить и почему это должно быть лучше, а не строго менее выразительное
ᛏᚺᛖ ᛚᛖᛋᛒᛁᚨᚾ ᛗᚨᚾ ᚷᛁᚱᛚ 🐝
ну собственно потому и хотел спросить, чтобы понять бред это или нет спасибо большое!
Alexander
тут интересно другое, почему были такие предположения об unsafePerformIO
ᛏᚺᛖ ᛚᛖᛋᛒᛁᚨᚾ ᛗᚨᚾ ᚷᛁᚱᛚ 🐝
ну скорее всего я просто неверно понял примеры
Alexander
было бы прикольно понять в чем корень непонимания и поправить
Alexander
а что за примеры?
ᛏᚺᛖ ᛚᛖᛋᛒᛁᚨᚾ ᛗᚨᚾ ᚷᛁᚱᛚ 🐝
import System.IO.Unsafe helper i = print i >> return i main = do one <- helper 1 let two = unsafePerformIO $ helper 2 print $ one + two
Alexander
и что тут неожиданного?
Alexander
я даже не вижу как тут reordering даже print-а может быть
ᛏᚺᛖ ᛚᛖᛋᛒᛁᚨᚾ ᛗᚨᚾ ᚷᛁᚱᛚ 🐝
утверждалось, что порядок one <- helper 1 и let two = unsafePerformIO $ helper 2 могут поменять порядок выполнения
Alexander
не вижу, как тут это может быть
Alexander
но вообще тут порядок не задан
Alexander
так что "поменять" это не очень валидное слово
Alexander
вот let one = unsafePerformIO $ helper 1 two = unsafePerformIO $ helper 2 in print $ one + two другое дело
Alexander
но о каком порядке тут можно говорить?
Alexander
в случае выше ghc естественно имеет право вынести two и даже вычислить
Alexander
но в этой программе есть 0 причин так делать
Alexander
не понимаю правда что тут может удивлять и быть неожиданным
Alexander
Pavel т.е. ошибка была в том, что недетерминированность порядка вычисления агрументов, вы восприняли как недетерминированность того как эти аргументы могут подставляться?
ᛏᚺᛖ ᛚᛖᛋᛒᛁᚨᚾ ᛗᚨᚾ ᚷᛁᚱᛚ 🐝
вот let one = unsafePerformIO $ helper 1 two = unsafePerformIO $ helper 2 in print $ one + two другое дело
там действительно вот такой пример. а то что я написал это исправление вот этого.
ᛏᚺᛖ ᛚᛖᛋᛒᛁᚨᚾ ᛗᚨᚾ ᚷᛁᚱᛚ 🐝
Alexander
а почему вы пишите в файл через unsafePerformIO?
Alexander
вы говорите компилятору о том, что ваше вычисление можно переставлять по желанию
Alexander
а потом удивляетесь когда это случается (в программе выше не случается, хотя ничего не мешает компилятору это сделать)
Alexander
это будет валидное преобразование
кана
я палагал, unsafePerformIO для дебага и логов онли
Alexander
у него есть юзкейсы
Alexander
для debug есть trace
кана
ну который поверх unsafePerformIO и работает же
Alexander
вообще глобальные мутабельные переменные там делать и всякую инициализацию иногда надо
Alexander
да =)
Alexander
ну и morally pure функции
ᛏᚺᛖ ᛚᛖᛋᛒᛁᚨᚾ ᛗᚨᚾ ᚷᛁᚱᛚ 🐝
а почему вы пишите в файл через unsafePerformIO?
я не собираюсь писать в файл через unsafePerformIO просто возник вопрос с тем, что мы можем это получить и как от этого избавиться, а потом просто вылилось в поток мыслей. вот как оказалось зря эх
Alexander
от этого не надо избавляться
Alexander
не забывать {-# NOINLINE "foo" #-} писать
Alexander
и не делать inlineIO есть на 150% не понимаешь что делаешь
ᛏᚺᛖ ᛚᛖᛋᛒᛁᚨᚾ ᛗᚨᚾ ᚷᛁᚱᛚ 🐝
хорошо спасибо за советы
Alexander
вконце этой статьи про inlineIO будет
Alexander
статья неплохая
ᛏᚺᛖ ᛚᛖᛋᛒᛁᚨᚾ ᛗᚨᚾ ᚷᛁᚱᛚ 🐝
а что за статья?
Alexander
которую ты читаешь
Alexander
https://www.schoolofhaskell.com/user/snoyberg/general-haskell/advanced/evaluation-order-and-state-tokens скорее всего
Alexander
судя по примерам
ᛏᚺᛖ ᛚᛖᛋᛒᛁᚨᚾ ᛗᚨᚾ ᚷᛁᚱᛚ 🐝
у меня был другой источник но спасибо за статью!
Зигохистоморфный
ридми обновили) https://github.com/haskell/haskell-ide-engine
Зигохистоморфный
ее https://code.visualstudio.com/updates/v1_18
Petrovich
ее https://code.visualstudio.com/updates/v1_18
синий логотип))) воркбенчи))) тащи папку)))
Petrovich
найс изменения
Anonymous
У Москвина хороший курс, особенно для тех у кого тяжело с чтением и приходится перечитывать n раз. Все разжевывается подробно, задания для новичков с точки зрения новичка(меня) помогают усваивать новый способ мышления.
Anonymous
Слоупок. Когда прочитал тогда и ответил)
A64m
ох, ну наконец-то терминал можно сбоку от окна с кодом открывать, а не снизу
Alexander
?
Alexander
кстати у редакторов каких-нить есть нормальная интеграция с терминалом, типа перекинуть код из исходника в терминал и обратно?
Евгений
Перекинуть хоткеем?
Alexander
угу
A64m
как перекинуть? Просто скопировать выделение или весь файл в терминал? Такое в обсуждаемом выше vs code есть, например
Vasiliy
для вима есть скрипты интеграции с tmux
Aragaer
мне хватает миддл клик пасты
A64m
я думаю, что такое есть вообще для любого редактора (разной степени костыльности, конечно)
Alexander
мне главное из терминала обратно
Alexander
вот, сделал я let foo = ....
Alexander
и потом хочу чтобы это foo мне в файл перекинулось
Aragaer
... выделил мышой, перепрыгнул в файл, "*p. Но это для вима.
Alexander
нечего мышой же выделять
PsyDebug
в емаксе можно и без перепрыгивания в активный буффер вставить в него вроде как
Alexander
я ввел постестил, не хочу наверх скролить
Vasiliy
ну, это уже не с терминалом интеграция, а с реплом
Евгений
Звучит как интеграция с ghci
Евгений
В имаксе должно быть
Alexander
:show bindings же есть
Alexander
ну да, реплом, не терминалом
A64m
он же код не показывает
A64m
еще и лишнее пихает для выведенных инстансов вроде такого data Bar $tcBar :: TyCon = _ $trModule :: Module = _
Alexander
действительно
Alexander
было же что-то что показывает?
A64m
но вообще можно накостылить, чтоб он из истории код для актуальных байндингов вынимал