Size: a a a

2021 March 19

к

кана in Haskell Start
A, X :: Type
f :: [A] -> SetM X
g :: Reader W [A]

h :: ReaderT W SetM X
g = do
 w <- ask
 let as = runReader g w
 lift (f as)
источник

IR

IC Rainbow in Haskell Start
Dreamerinnoise
и как там?
если всё заанбоксить и арифметику делать - регистры используются, волшебной векторизации нет
источник

A

Aragaer in Haskell Start
скорее наоборот, хочу ReaderT W SetM x
источник

к

кана in Haskell Start
ну поправил до X
источник

A

Aragaer in Haskell Start
не, в смысле x это некоторый конкретный тип, а SetM это монада и a это ее аргумент
источник

A

Aragaer in Haskell Start
f делает из списка SetM
источник

A

Aragaer in Haskell Start
но вобщем да, понял
источник

A

Aragaer in Haskell Start
я не догадался напрямую дернуть runReader
источник

A

Aragaer in Haskell Start
внезапно словил, что
 evaluate :: Monad m => M.Map (Bank,Currency) Decimal -> ReaderT World m Decimal
evaluate balances = sum <$> mapM evaluate' $ M.toList balances
источник

A

Aragaer in Haskell Start
не работает, а если $ заменить на скобки, то работает
источник

O

Ortofax in Haskell Start
sum <$> mapM evaluate' $ M.toList balances это (sum <$> mapM evaluate') (M.toList balances)
источник

A

Aragaer in Haskell Start
а, во, нашел mapReaderT
источник

A

Aragaer in Haskell Start
g = mapReaderT f g
источник

к

кана in Haskell Start
ну, в случае когда исходный тип это Identity, то этот mapReaderT это просто (pure . runReader)

mapReaderT f m = ReaderT $ f . runReaderT m
источник

A

Aragaer in Haskell Start
ага, я понял, что дело в порядке вычисления операторов
источник

A

Aragaer in Haskell Start
ага
источник

A

Aragaer in Haskell Start
а у меня наверно можно сделать что там не Reader W [x], а ReaderT W [] x.. или такое нелегально?
источник

к

кана in Haskell Start
да легально конечно, если функцию forall a. [a] -> m a можно написать
источник

к

кана in Haskell Start
а возможно ее написать только если m имеет Alternative инстанс (если это общий случай, иначе можно что угодно сделать офк с этими значениями)

по сути единственный разумный общий вариант это

f :: Alternative f => [a] -> f a
f = foldr (<|>) empty .  fmap pure
источник

A

Aragaer in Haskell Start
ну да, она ровно такая и есть, forall. [a] -> m a. Оно для Ord схлопывается в Set, а для не-Ord остается списком
источник