Size: a a a

2021 April 03

OS

Oleksandr Shyshko in Haskell
Maxim Koltsov
a ~ Scientific
благодарю. С расширением заработало
источник

к

кана in Haskell
Maxim Koltsov
Но это может каким-то неожиданным образом повлиять на вывод, возможно
не, не повлияет, повлиять может только у инстансов
источник

к

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

MK

Maxim Koltsov in Haskell
Ну коерсы все равно же стираются
источник

к

кана in Haskell
хочется что-то вроде тардиса, но без разделения на прошлое и будущее (и возможно из-за этого эффективнее), видел кто такое?
источник

K

Kir in Haskell
кана
хочется что-то вроде тардиса, но без разделения на прошлое и будущее (и возможно из-за этого эффективнее), видел кто такое?
MonadFix?
источник

к

кана in Haskell
хм, а действительно
источник

MK

Maxim Koltsov in Haskell
Произошла ирония
источник

к

кана in Haskell
но хм, с monadfix нужно таскать значение явно, а хочется стейтл-лайк интерфейс
источник

к

кана in Haskell
мне буквально нужно пушить в список стейта, доставать из списка стейта (в том числе и если значение еще не запушили, но запушат в будущем), и чтобы красиво
источник

K

Kir in Haskell
кана
мне буквально нужно пушить в список стейта, доставать из списка стейта (в том числе и если значение еще не запушили, но запушат в будущем), и чтобы красиво
В ЧД провалишься, рано или поздно
источник

K

Kir in Haskell
Попытаешься что-то напечатать на отладку и <<loop>> в лучшем случае
источник

a

adam in Haskell
кана
мне буквально нужно пушить в список стейта, доставать из списка стейта (в том числе и если значение еще не запушили, но запушат в будущем), и чтобы красиво
есть же инстанс на стейт
источник

к

кана in Haskell
это пробрасывание инстанса из Identity просто
источник

a

adam in Haskell
каво
источник

a

adam in Haskell
instance MonadFix m => MonadFix (StateT s m) where
 mfix f = StateT $ \s ->
   mfix (\(x, _) -> runStateT (f x) s)
источник

K

Kir in Haskell
кана
это пробрасывание инстанса из Identity просто
И шо? Возми ленивый стейт
источник

к

кана in Haskell
adam
instance MonadFix m => MonadFix (StateT s m) where
 mfix f = StateT $ \s ->
   mfix (\(x, _) -> runStateT (f x) s)
ну вот про это и говорю, пробрасывание из identity
источник

к

кана in Haskell
Kir
И шо? Возми ленивый стейт
так а что мне это даст, get ленивого стейта все равно будет доставать из уже существующего стейта, разве нет?

Поясню задачу:
есть список инструкций
data Instr = Label String | Push Int | Jump String

нужно получить список инструкций без лейблов, где лейбл заменяется на индекс
data UnlabledInstr = UPush Int | UJump Int deriving (Show)

разные инструкции генерируют разное число элементов (в данном случае только Label ничего не генерирует, но это упрощенный случай)
источник

к

кана in Haskell
какое-то наивное решение выглядит так

unlabel :: [Instr] -> [UnlabledInstr]
unlabel instrs =
 let (labels, unlabeled) = go labels 0 instrs []
  in unlabeled
 where
   go labels i [] result =
     (labels, reverse result)
   go labels i (Label label : xs) result =
     go ((label, i) : labels) i xs result
   go labels i (Push x : xs) result =
     go labels (i + 1) xs (UPush x : result)
   go labels i (Jump l : xs) result =
     go labels (i + 1) xs (UJump (fromJust (lookup l labels)) : result)
источник