Size: a a a

2020 November 23

к

кана in Haskell
если гарантировать в коде, что добавлять уровни можно будет только через with, то легко
источник

MK

Maxim Koltsov in Haskell
Хитрый какой
источник

к

кана in Haskell
гарантировать легко, сделав ньютайп
источник

к

кана in Haskell
то что там сделано я делал тысячу раз когда писал тайпчекеры и интерпретаторы
источник

к

кана in Haskell
в таких стеках я хранил значения или типы в скоупах
источник

KV

Kirill Valyavin in Haskell
Make illegal states representable via coerce
источник

к

кана in Haskell
не сработает, ведь для коерса нужно будет конструктор в контексте
источник

к

кана in Haskell
а никто не заставляет его экспортировать)
источник

KV

Kirill Valyavin in Haskell
А ансейф
источник

АК

Анатолий Кот... in Haskell
кана
type SM a = StateT [[Int]] IO a

push :: Int -> SM ()
push x = modify (\(cur:rest) -> ((x:cur):rest))
да я так изначально и делал, но тогда f не видит изменений в [[Int]], которые происходят после ее объявления
источник

к

кана in Haskell
а ансейф может сломать что угодно когда угодно
источник

KV

Kirill Valyavin in Haskell
Ну хотя бы хорошо сломать, а не черт знает где
источник

к

кана in Haskell
Анатолий Кот
да я так изначально и делал, но тогда f не видит изменений в [[Int]], которые происходят после ее объявления
да, тогда придется оставить рефы
источник

АК

Анатолий Кот... in Haskell
кана
то что там сделано я делал тысячу раз когда писал тайпчекеры и интерпретаторы
я вот и пытаюсь из sicp интерпретатор для лиспа написать - уперся в то, что когда лябмду создаю не получается окружающие объявления захватить (по сути то, что выше)\
источник

к

кана in Haskell
а в лисп этот мутабельный?
источник

к

кана in Haskell
потому что если не мутабельный, то захватывать нужно только значения, и можно сделать стейт
источник

к

кана in Haskell
а если мутабельный, то придется оставить рефы
источник

АК

Анатолий Кот... in Haskell
кана
а в лисп этот мутабельный?
да
источник

АК

Анатолий Кот... in Haskell
кана
а если мутабельный, то придется оставить рефы
жаль, ну ладно
источник

к

кана in Haskell
ну не жаль, IORef это буквально "мутабельное" значение, так что оно семантически под задачу хорошо подходит
источник