Size: a a a

2021 November 20

VV

Vitaly Vasiliev in Haskell Start
понял, спасибо
источник
2021 November 21

D

Dmitry in Haskell Start
Граждане, такое дело:
была у меня функция в JS которую я подсмотрел в Debug.Trace - trace. Но работала у меня, как и всё в JS, чрезвычайно просто:

const trace =
   (x, ...comments) =>
       { console.log(x, ...comments); return x }

Я вот сейчас попытался её восстановить на Хаскеле, и не пойму как вернуть в область чистых вычислений значение x, которое было испльзовано.
Я головой конечно понимаю, что надо развернуть монаду в значение, но не пойму как. Я просто ещё до 10-й лекции Юры не дошёл, и не хочу скакать. А трассировать хочу прямо сейчас.
источник

D

Dmitry in Haskell Start
adhocTrace :: Show (IO b) => IO b -> IO b
adhocTrace x = print x >> x

вот собственно: хочу превратить последний IO b в b
источник

[

[BRM]White Rabbit in Haskell Start
Это делается лишь через >>=, <*> и <$>
источник

[

[BRM]White Rabbit in Haskell Start
Т.е.
trace x >>= \value -> anotherIOAction value
Тут value имеет тип b, но anotherIOAction должно порождать новое IO действие для их композиции
источник

[

[BRM]White Rabbit in Haskell Start
Собственно, можно воспользоваться do-нотацией для облегчения написания такого кода
источник

p

parket in Haskell Start
Честно такой trace не написать.
источник

[

[BRM]White Rabbit in Haskell Start
Ещё есть ансейф-штуки, но это не то, что ты хочешь
источник

A

Aragaer in Haskell Start
ну вообще есть некоторое trace String a, которое возвращает a
источник

[

[BRM]White Rabbit in Haskell Start
Да-да, научи ансейфу
источник

D

Dmitry in Haskell Start
Так а что за другое IO? Какая-то имитация инпута?  Мол сказать внутри функции чтобы шла домой?
источник

A

Aragaer in Haskell Start
The function is not referentially transparent: its type indicates that it is a pure function but it has the side effect of outputting the trace message.
источник

A

Aragaer in Haskell Start
These can be useful for investigating bugs or performance problems. They should not be used in production code.
источник

D

Dmitry in Haskell Start
Ай ноу. Ну
источник

D

Dmitry in Haskell Start
Это ж дебаг
источник

A

Aragaer in Haskell Start
ну вот тогда взять пакет Debug.Trace и пользоваться
источник

[

[BRM]White Rabbit in Haskell Start
Нет, это просто любая другая функция, я её так для удобства назвал. Значение же не само по себе нужно, а чтобы потом в другом io использовать
источник

D

Dmitry in Haskell Start
значение нужно, чтобы потом его дальше в функции использовать же, не?
источник

D

Dmitry in Haskell Start
я же наоборот хочу от эффекта избавиться
источник

D

Dmitry in Haskell Start
и продолжить компутацию
источник