@haskellru

Страница 1213 из 1551
kana
21.05.2018
18:23:30
какие исключения

Denis
21.05.2018
18:24:44
ну так вот вместо MaybeT можно ExceptT чтобы сказать чего упало

kana
21.05.2018
18:25:14
ну так я наоборот выше заменил ExceptT на MaybeT, потому что в задаче не требуется знать причин

только стейт финальный

Google
IC
21.05.2018
18:26:00
Ну мало ли что там в задаче. Это же ещё дебажить как-то надо.

kana
21.05.2018
18:27:02
так там в принципе вроде только одна причина для ошибки, которую можно явно отдать

ExceptT - не "ровно то, что требуется", хоть возможно то, что будет полезно в некоторых случаях

IC
21.05.2018
18:30:49
всегда можно either (const Nothing) Just сделать

https://theam.github.io/tintin/ всем документировать полчаса!

Антон
21.05.2018
18:40:24
Лента, ещё раз, конечная

分解物質
21.05.2018
18:43:15
"сколько монад надо чтобы интерпритировать brainfuck?"

kana
21.05.2018
18:45:10
Лента, ещё раз, конечная
да там больше для примера нужных монад

Антон
21.05.2018
18:47:13
Так, то есть при работе интепретатора придётся везде иметь дело с Just?

kana
21.05.2018
18:47:23
нет, зачем

Антон
21.05.2018
18:47:31
Тогда я не понял

kana
21.05.2018
18:47:31
MaybeT же, а не Maybe



Google
kana
21.05.2018
18:48:15
Тогда я не понял
MaybeT сам все хендлит, ты просто сможешь в любой момент с помощью stop остановить выполнение



execInterpreter вернет Tape _ 2 _

то есть это как ExceptT, только когда есть ровно одна (или не важно, какая) причина для выхода

Антон
21.05.2018
18:52:49
А нельзя было написать mapM_ run where ... ?

kana
21.05.2018
18:53:03
можно было

но код не сегодняшний

Антон
21.05.2018
18:54:53
Гм, я тут пытаюсь что-то с ST сделать, но там приходится newSTRef и modifySTRef использовать вместе с lift. Я что-то делаю не так или так и надо?

Т. е., lift в коде выше из-за линз нету?

kana
21.05.2018
18:55:35
в коде выше State, а не ST

и там modify/put/get же сразу с MonadState работают

как и +=/-=/%=/.=

Антон
21.05.2018
18:59:49
Так, а чем тогда отличаются ST и State? Тем, что в первой настоящая мутабельность?

Alexander
21.05.2018
19:00:03
да

Антон
21.05.2018
19:00:08
cont хватит
Не, продолжения я ещё не постиг

Alexander
21.05.2018
19:00:29
ну это meta ответ, через неё почти все выражается

то, что хочет Fix/MonadFix вроде не выражается только

Антон
21.05.2018
19:01:10
ну это meta ответ, через неё почти все выражается
ContT вроде ж по производительности сильно бьёт

Alexander
21.05.2018
19:01:55
вроде не должно, у нас все вычисление большое cont

Google
Alexander
21.05.2018
19:02:00
так RTS работает

впрочем это все только с теор точки зрения интересно

Антон
21.05.2018
19:03:16
впрочем это все только с теор точки зрения интересно
Вот именно. А мне всё-таки решение хочется получить без особого выворачивания мозга наизнанку

Alexander
21.05.2018
19:04:08
ну @kana_sama вроде все по делу ответил, так что разобраться в этом только

Антон
21.05.2018
19:13:08
И ещё, можно Vector совместно с ST использовать или проще взять Data.Array.ST?

kana
21.05.2018
19:17:50
ящетаю, что делать кату на хаскеле и брать ST - ну это такое

Антон
21.05.2018
19:18:29
ящетаю, что делать кату на хаскеле и брать ST - ну это такое
Если взять State, то будет thunk в памяти копиться, не?

kana
21.05.2018
19:18:34
так это же ката

а не продакшен

хрен с ним что копится

Антон
21.05.2018
19:19:10
а не продакшен
Ну, пользователей просят код оценивать и с точки зрения продакшнпригодности

Алексей Ayaye :)
21.05.2018
19:19:20
Странного хочу. Есть функция. Хочется повторно использовать структуру шаблонов и гардов - сгенерировать другую функцию с той же структурой. Посмотрел на Template Haskell. Я правильно понимаю, что по готовой функции AST не получить, как по типу? Но можно обернуть её всю в скобочки и на выходе получить AST. А по нему восстановить изначальную функцию и сгенерировать другую? Есть ли другие подходы? Пните в правильном направлении :)

Alexander
21.05.2018
19:19:36
ST может быть в base стека

другой подход это сделать класс на все методы

но это плохой подход

Антон
21.05.2018
19:20:26
ST может быть в base стека
Ну я так и использую

example x y = runST $ runMaybeT $ do d <- lift $ newSTRef x if (y == 0) then(MaybeT $ pure Nothing) else lift $ modifySTRef' d (`div` y) lift $ readSTRef d

Alexander
21.05.2018
19:21:00
а, для ST-шных надо

Антон
21.05.2018
19:21:49
а, для ST-шных надо
Блин, некрасиво выглядит

Google
Alexander
21.05.2018
19:22:03
ну сделай класс для STref

если очень хочется

(я хотя вчера говорил, что имхо это так себе решение)

но код красивее будет

Антон
21.05.2018
19:24:16
ну сделай класс для STref
Хм, а этом есть смысл. У меня по факту два объекта постоянно в памяти — указатель текущей позиции и вектор

Alexander
21.05.2018
19:24:43
ну я про операции

class MonadST m where newSTRef :: a -> m t (STRef a) default newSTRef :: MonadBase ST m => a -> m t (STRef a) newSTRef = liftBase . ST.newSTRef ....

что-то такое

можно без дефолтной реализации

Антон
21.05.2018
19:31:17
Так, я понял, что нифига не понял трансформеры монад

Гм, а почему для Vector.Mutable нет операции fromList?

Alexander
21.05.2018
20:28:35
хороший вопрос!

но ничего не мешает сделать unsafeThaw .. V.fromList

или V.modify (...) . V.fromList

Антон
21.05.2018
20:39:48
run :: Program -> Tape -> Tape run p t = either id id $ runST $ runExceptT $ do prog <- lift . newSTRef . V.thaw . V.fromList $ p lift $ return [O] Жалуется на Haskell/SylarDoom/Smallfuck.hs:58:29: No instance for (Control.Monad.Primitive.PrimMonad m0) arising from a use of `V.thaw' The type variable `m0' is ambiguous

Ну и как PrimMonad уточнить?

Alexander
21.05.2018
20:45:35
runST обавить?

Антон
21.05.2018
20:46:02
runST обавить?
Эм... Где?

Alexander
21.05.2018
20:46:23
а ужеж есть

Google
Антон
21.05.2018
20:46:39
а ужеж есть
Угу. Именно поэтому и смущает

Alexander
21.05.2018
20:47:08
lift $ do x <- V.thaw . V.fromList $ p newSTRef x

=<< а не .

Антон
21.05.2018
20:48:16
=<< а не .
В моём коде или твоём?

Alexander
21.05.2018
20:48:23
твоем

ну или как я написал, явно в 2 строки

Антон
21.05.2018
20:56:36
Так, видимо, кату я уже завтра допишу

Anatolii
22.05.2018
05:47:52
а можно как-то в одном модуле выключить все варнинги?

Dmitry
22.05.2018
05:58:16
{-# OPTIONS_GHC -w #-} ?

Anatolii
22.05.2018
06:01:08
{-# OPTIONS_GHC -w #-} ?
спасибо, сработало:)

Aleksey
22.05.2018
06:04:07
цитирующие скобки https://eax.me/template-haskell/
Этот термин не переводят обычно - так и пишут "quasiquotes"

Есть ещё вариант "какие-то-там (тут вроде бы топоним) скобки", но я его не помню :(

Aleksey
22.05.2018
06:06:55
В контексте хаскеля разве что "квазицитирование" ещё встречал

Вроде как получить AST вне TH нельзя

Только если парсить исходник заново

А точно не получится обойтись комбинатором?

Страница 1213 из 1551