Andrey
...
where data X = X
...
Cheese
исправь ошибки
я намекаю, что фраза «не компилируется» несёт слишком мало информации
21it
Yuriy
вот такая ошибка при попытке запустить тест
• No instance for (Eq (IO (Scraped URL)))
arising from a use of ‘assertEqual’
Cheese
Andrey
21it
мои собственные типы deriving (Show, Eq, Ord)
21it
я думаю тут вся сложность в IO
Cheese
Cheese
ок
можно вынести эту функцию с её определениями в отдельный модуль
Andrey
да я лучше таплами обойдусь в таком случае 🙂 спасибо, модуль тут не нужен
21it
в таком случае будет писать "error: parse error on input ‘do’"
21it
почему-то в юнит-тестах do нотации не любит компилятор
кана
кана
элмовая архитектура плоская, это как одна нода
Cheese
Cheese
в принципе, интуиция в отступах довольно быстро вырабатывается
кана
элмовая архитектура плоская, это как одна нода
-- with monadic effects system
main :: IO ()
main = do
input <- getLine
print input
exit
-- without
getLine :: (String -> s) -> IO s
print :: String -> s -> IO s
exit :: IO s
data State = A | B String | C String
step :: State -> IO State
step A = getLine (\input -> B input)
step (B input) = print input (C input)
step (C input) = exit
app :: App State
app = App { initial = A, step }
кана
если (name == name'), то вместо типа c должны быть a и b, а вместо s/t должны быть одинаковые r r какие
кана
а если name /= name', то оба c, а дальше s и t
кана
то есть нужно как-то на два инстанса разбить что ли
кана
и это приводит к первоначальной проблеме вроде
кана
если будешь еще пробовать, то тестировать можно на этом примере:
type User a = Record ["nickname" ::: String, "age" ::: Int, "payload" ::: a]
kana = record @(User Int) "kana" 20 1000
andrew = kana & #nickname .~ "andrew"
& field @"age" +~ 10
& field @"payload" .~ ""
Alexander
как правильно писать тесты зависящие от времени, если не хочется вводить MonadTime ?
Leonid 🦇
передавать время явно
Alexander
явно передавать функцию доставания времени тоже не хочется
Alexander
некуда
Leonid 🦇
ну а monadtime ты куда собрался передавать?
Alexander
передача времени явно это не очень хороший интерфейс
Alexander
нужный только для тестов
Leonid 🦇
смотря для чего
Alexander
для lru
Alexander
т.е. поидее часы это внутренняя деталь реализации
Alexander
запилил в ядре сервиса передачу времени и внешний метод, прячущий
Алексей
А зачем там время? Из кеша выгоняют по времени, а не по числу использований?
Alexander
по числу использований не удобно
Alexander
там надо размер рядом хранить, а вычисление его O(n)
Alexander
тем более тут я хочу все равно быть уверенным, что результат не будет лежать слишком долго
Cheese
правильный путь — передавать функцию времени явно
странный путь — подменять библиотеку time в тестах
Alexander
мне больше понравилось, что @lonokhov предложил, если честно
Leonid 🦇
по хорошему нужно подменять модуль же
Leonid 🦇
бэкпек и это всё
Alexander
ну хорошее не скоро придёт
DelightfullyBitchySweets
/stat@combot
Combot
combot.org/c/-1001043143583
DelightfullyBitchySweets
Добрый день.
DelightfullyBitchySweets
Я новичок и мне нужна помощь в написании программы для дискретной сгортки сигналов
DelightfullyBitchySweets
Такую программу я писал на С и С++ и там ничего сложного небыло
DelightfullyBitchySweets
Но в функциональном варианте что-то ничего непонятно
DelightfullyBitchySweets
Может кто-то сможет помочь, буду очень благодарен
Alexander
что именно не понятно?
Alexander
ответить на вопросы и помочь тут ответят и помогут, переписывать программу полностью, врятли будут
DelightfullyBitchySweets
Как организовать сдвиг массива и умножения клиентов которые находятся один над вторым
Alexander
самое просто - точно так же как и в любой императивной программе:
https://hackage.haskell.org/package/vector-0.12.0.1/docs/Data-Vector-Unboxed-Mutable.html
https://hackage.haskell.org/package/vector-0.12.0.1/docs/Data-Vector-Unboxed-Mutable.html#v:read
https://hackage.haskell.org/package/vector-0.12.0.1/docs/Data-Vector-Unboxed-Mutable.html#v:write
Alexander
для более удобной индексации можно использовать Ix:
https://hackage.haskell.org/package/base-4.11.1.0/docs/Data-Ix.html
DelightfullyBitchySweets
Спасибо
DelightfullyBitchySweets
Буду разбираться
Alexander
но вообще лучше вопросы в формате, хочу X, есть Y (ссылка на gist), не получается Z, пробовал W
Alexander
тогда ответы будут более точными
DelightfullyBitchySweets
На следующий раз буду знать как вопросы ставить
Alexander
просто иначе нормальная подсказка будет если кто-то конкретно этой проблемой занимался
Alexander
ну или если повезет
Alexander
ура встретил место где atomicModifyIORef' (с prime) было не правильно, а надо atomicModifyIORef
Alexander
любой узел, например
Alexander
если то, модификация зависит от результата дальшейшего
Alexander
правда я радостно что-то наврал и оно у меня виснет в более сложном случае
Alexander
:/
Alexander
причем почему - не ясно
Ilya
Что там ещё может понадобиться... Может cycle для зацикливания
Misha
Alexander
x <- atomicallyModifyIORef ref $ f z
z <- g x
Alexander
грубо говоря
DelightfullyBitchySweets
Alexander
я вот правда не уверен, что так надо часто делать