Size: a a a

2020 November 12

JS

Jerzy Syrowiecki in Haskell
Yuuri
Эти isA ещё вводить нужно
с призмами это легко
источник

AV

Alexander Vershilov in Haskell
Maxim Koltsov
Хм, а можно пометить ffi как не reentrant? Чтобы из разных капабилити несколько раз одновременно он не делался
Чтобы мне самому локи на него не наворачивать
unsafePerformIO ?
источник

MK

Maxim Koltsov in Haskell
Alexander Vershilov
unsafePerformIO ?
?
источник

AV

Alexander Vershilov in Haskell
гарантирует, что thunk только одним тредом вычислится
источник

AV

Alexander Vershilov in Haskell
А если ты хочешь, чтобы из разных частей программы нельзя было независимо вызвать ffi функцию, то тут без своих локов уж никак
источник

AV

Alexander Vershilov in Haskell
но естественно сделать их дёшево:

module M  (ffiExported) where

{-# NOINLINE internalLock #-}
internal_lock = unsafePerformIO $ newMVar ()

ffiExported  params = withMVar internal_lock $ \_ -> ffiActual params
источник

AV

Alexander Vershilov in Haskell
А ещё кажется reentrant называют другую вещь, связанную с взаимодействием с сигналами и перезаходом в фунцию снова
источник

MK

Maxim Koltsov in Haskell
Alexander Vershilov
А ещё кажется reentrant называют другую вещь, связанную с взаимодействием с сигналами и перезаходом в фунцию снова
Возможно
источник

AV

Alexander Vershilov in Haskell
> One function is said to be a reentrant function if there is a provision to interrupt that function in the course of execution, then service the ISR (Interrupt Service Routine) and then resume the task.
источник

AV

Alexander Vershilov in Haskell
Хотя вот wiki не согласна
источник

AV

Alexander Vershilov in Haskell
> Function is called reentrant if it can be interrupted in the middle of its execution and then safely called again ("re-entered") before its previous invocations complete execution
источник

Oℕ

Oleg ℕizhnik in Haskell
почему в этом коде https://repl.it/join/lzzgxuxr-odomontois
class ZeepWith a b c la lc | la -> a, la b c -> lc where
   zeepWith :: (a -> b -> c) -> la -> lc

instance ZeepWith a b c [a] ([b] -> [c]) where
   zeepWith f as bs = zipWith f as bs

instance ZeepWith a b c la lc => ZeepWith a b c (r -> la) (r -> lc) where
   zeepWith f rxa r = zeepWith f (rxa r)

без UndecidableInstances
• Illegal instance declaration for
   ‘ZeepWith a b c (r -> la) (r -> lc)’
   The coverage condition fails in class ‘ZeepWith’
     for functional dependency: ‘la -> a’
   Reason: lhs type ‘r -> la’ does not determine rhs type ‘a’
   Un-determined variable: a
   Using UndecidableInstances might help

т
.е. по моей логике из r -> la выводится la, а из него выводится a на основании инстанса слева
источник

MK

Maxim Koltsov in Haskell
Alexander Vershilov
А если ты хочешь, чтобы из разных частей программы нельзя было независимо вызвать ffi функцию, то тут без своих локов уж никак
Именно так и хочу...
источник

YR

Yuki Rito in Haskell
Alexander Vershilov
А ещё кажется reentrant называют другую вещь, связанную с взаимодействием с сигналами и перезаходом в фунцию снова
угу. Даже сами прерывания на аппаратном уровне бывают реентерабельными (nested) и нет, в микрухах обычно можно было выставить флагами моды
источник

AV

Alexander Vershilov in Haskell
Maxim Koltsov
Именно так и хочу...
Вот там решение чуть выше
источник

MK

Maxim Koltsov in Haskell
такое я могу, да
источник

MK

Maxim Koltsov in Haskell
надеялся что можно заставить ртс это за меня делать)
источник

AV

Alexander Vershilov in Haskell
Oleg ℕizhnik
почему в этом коде https://repl.it/join/lzzgxuxr-odomontois
class ZeepWith a b c la lc | la -> a, la b c -> lc where
   zeepWith :: (a -> b -> c) -> la -> lc

instance ZeepWith a b c [a] ([b] -> [c]) where
   zeepWith f as bs = zipWith f as bs

instance ZeepWith a b c la lc => ZeepWith a b c (r -> la) (r -> lc) where
   zeepWith f rxa r = zeepWith f (rxa r)

без UndecidableInstances
• Illegal instance declaration for
   ‘ZeepWith a b c (r -> la) (r -> lc)’
   The coverage condition fails in class ‘ZeepWith’
     for functional dependency: ‘la -> a’
   Reason: lhs type ‘r -> la’ does not determine rhs type ‘a’
   Un-determined variable: a
   Using UndecidableInstances might help

т
.е. по моей логике из r -> la выводится la, а из него выводится a на основании инстанса слева
Не могу вдумываться, но зацепился за:

> а из него выводится a на основании инстанса слева

инстанс слева не используется в выводе, он только проверяется после того, как права часть заматчилась. Есть техники переноса слева направо через доп класс, но это знатный Олеггинг (хотя тебе ок должно быть 🙂 )
источник

AV

Alexander Vershilov in Haskell
Maxim Koltsov
надеялся что можно заставить ртс это за меня делать)
хотелка явно за границами RTS, #pragma omp single какой-то
источник

MK

Maxim Koltsov in Haskell
почему за границами-то
источник