Size: a a a

2021 July 01

NI

Nick Ivanych in Haskell
В целом, соглашусь - это не та история, которую стоит изучать ;-)
"Та", в основном, это что A64 копает.
источник

[

[BRM]White Rabbit in Haskell
я решил всё переиграть и работать с ST s (STRef s a) вместо просто STRef s a, в результате получилось ничё так
источник

D

Dreamerinnoise in Haskell
то есть, сделать как надо
источник

[

[BRM]White Rabbit in Haskell
да!
источник

K

Kir in Haskell
Оберни ST s (STRef s c) и тогда можно
источник

[

[BRM]White Rabbit in Haskell
почему вот это не работает🤔
источник

K

Kir in Haskell
Потому что ST s (STRef s a) возвращает разные переменные каждый раз?
источник

K

Kir in Haskell
почему не STRef s a -> STRef s a -> ST s ()?
источник

[

[BRM]White Rabbit in Haskell
потому что у меня не получилось сделать инстанс Num для Num a => STRef s a, но получилось для Num a => ST s (STRef s a)
источник

K

Kir in Haskell
Screeching in agony
источник

K

Kir in Haskell
Не надо так, есть же newSTRef :: a -> ST s (STRef s a)
источник

[

[BRM]White Rabbit in Haskell
мне для + надо было :D
источник

K

Kir in Haskell
Зачем тебе вообще понадобился (+) над переменными?
источник

[

[BRM]White Rabbit in Haskell
источник

K

Kir in Haskell
А ты уверен, что это будет быстрее, чем fib = 0 : 1 : zipWith (+) fib (tail fib)?
источник

[

[BRM]White Rabbit in Haskell
нет, конечно, это медленнее
источник

[

[BRM]White Rabbit in Haskell
ну, должно быть по идее
источник

[

[BRM]White Rabbit in Haskell
я думаю, самое быстрое это
fib = go 1 0
 where
    go a b 1 = b
    go a b n = go (a + b) a (n - 1)
источник

K

Kir in Haskell
У меня fib !! 100000 в ghci где-то секунду выполняется
источник

[

[BRM]White Rabbit in Haskell
я про свой вариант, он медленнее
источник