Size: a a a

2021 June 09

JS

Jerzy Syrowiecki in Haskell
вот даже так

Could not deduce (Eq a) arising from a use of ‘==’
from the context: If flag (Eq a) (Eq a)
источник

IO

I O in Haskell
Можно ввести что-то синглтонное типа KnownBool чтобы на рантайме различать True и False в типах, тогда в одной из веток такого ифа мы знаем что c ~ Int, соотв. Eq c, в другой мы просто знаем Eq c, соотв можем достать словарь.

type Dict :: Constraint -> Type
data Dict c = c => Dict

type Top :: Constraint
type Top = ()

type If :: Bool -> a -> a -> a
type family If i t e where
 If 'True  i _ = i
 If 'False _ e = e

type  KnownBool :: Bool -> Constraint
class KnownBool b where
 sIf :: (b ~ 'True => r) -> (b ~ 'False => r) -> r

instance KnownBool 'True  where sIf t _ = t
instance KnownBool 'False where sIf _ f = f

cmp :: forall flag a c . (If flag Top (Eq a), c ~ If flag Int a, KnownBool flag) => c -> c -> Bool
cmp a b | Dict :: Dict (Eq c) <- sIf @flag Dict Dict = a == b

Но теперь надо везде таскать этот KnownBool
источник

JS

Jerzy Syrowiecki in Haskell
конкретно (a ~ Int) и (Eq a) можно просто обобщить до (Eq a)
источник

Q

Qwerty in Haskell
На практике с параллельным программированием на потоках все хорошо у Haskell?
источник

MP

Misha Puzanov in Haskell
все довольно хорошо, да
источник

MP

Misha Puzanov in Haskell
если речь именно про "параллельное программирование" в смысле похожем на HPC, то там сложнее, есть всякие repa, massif, есть accelerate, но там надо тюнить и бенчмаркать, там есть некоторое количество магии
источник

Q

Qwerty in Haskell
HPC в смысле supercomputing? Не... )
источник

AM

A M in Haskell
Кмк если про потоки то это конкурентное а не параллельное.
источник

Q

Qwerty in Haskell
Смотря как готовить.
источник

MP

Misha Puzanov in Haskell
ну если это про конкурентные системы, то хаскель наверное лучший язык, чтобы их писать
источник

JS

Jerzy Syrowiecki in Haskell
хотя если больше 1 компьютера, то тут Эрланг может оказаться удобнее
источник

MP

Misha Puzanov in Haskell
это да
источник

MP

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

AS

Anton Sorokin in Haskell
Есть ли у кого то актуальный stack.yaml для reflex-dom через jsaddle-warp ? Там адский депхелл какой то и несобирающиеся пакеты, я много версий пеепрбовал, везде ошибки типов
источник

AS

Anton Sorokin in Haskell
Без ghcjs, именно через stack, по идее же можно собрать?
источник

AS

Anton Sorokin in Haskell
Если без allow-newer, то депхелл, а если с ним - ошибки типов, то есть
источник

Q

Qwerty in Haskell
Мне нужно, чтобы весь стек по конкретной вычислительной задаче был в отдельном потоке. Для каждой вычислительной задачи свой поток. Подразумевается пул потоков. Перед пулом очередь. Очередь таки да, можно раскидывать конкурентно, с ожиданием места в пуле потоков.
источник

MP

Misha Puzanov in Haskell
я обычно делаю что-то типа ограниченной по размеру очереди, в которой элементы типа Async a, которые делают что-то cpu intensive
источник

Q

Qwerty in Haskell
В очередь данные будут по сокету заходить.
источник

Q

Qwerty in Haskell
Ограничения по очереди скорее всего на внешний сервис пойдут, который будет и балансировкой заниматься.
источник