Кто тебе сказал что адрес лямбды является ее типом?
Адрес лямбды (функции) известен только ллвм
|| 10 и || 20 имеют разный тип
и правильно
И? Адрес функции то тут при чем?
короче то что у лямбд уникальный тип это нифига не удобно
сделали бы структуру Fn(A) -> B
и все функци одной сигнатуры были бы этой структурой
Нормально. Если описывать тип целиком, это приведет к комбинаторному взрыву.
Растокомпилятор и так не очень быстрый
я к тому, что вещи if foo { move || x } else { || 20 } не должны требовать обмазывания either'ами
Ну конкретно это и не требует)
fxd
Не-а, лямбда, которая ничего не захватывает, кастится в обычный fn-тип
ну так она x захватывает
А, увидел, да
Ну вроде был пропозал автоматически герерировать енам в таких случаях
Процедурный макрос для этого всяко есть)
ну он помер вроде. Макрос чел сделал но он очень ненадежно работал, и наглядно показал что без полноценной поддержки компилятора это сделать невозможно
Да, там типы надо знать
ну из вещей которые прям поломаны вроде все на самом деле. Остальное сырость и недостаток фичей типа const fn
ArrayWithAtMost32Elements можно отнести правда еще к костылям)
Ну, имхо, честно, не самая большая проблема. Там где на перформанс похуй -- велкам ту боксед трейт обджектс
Там где не похуй -- Either
Есть даже отличный крейт
ну ок
Адрес лямбды (функции) известен только ллвм
|| 10 и || 20 имеют разный тип
и правильно
И? Адрес функции то тут при чем?
короче то что у лямбд уникальный тип это нифига не удобно
сделали бы структуру Fn(A) -> B
и все функци одной сигнатуры были бы этой структурой
Нормально. Если описывать тип целиком, это приведет к комбинаторному взрыву.
Растокомпилятор и так не очень быстрый
я к тому, что вещи if foo { move || x } else { || 20 } не должны требовать обмазывания either'ами
Ну конкретно это и не требует)
fxd
Не-а, лямбда, которая ничего не захватывает, кастится в обычный fn-тип
ну так она x захватывает
А, увидел, да
Ну вроде был пропозал автоматически герерировать енам в таких случаях
Процедурный макрос для этого всяко есть)
ну он помер вроде. Макрос чел сделал но он очень ненадежно работал, и наглядно показал что без полноценной поддержки компилятора это сделать невозможно
Да, там типы надо знать
ну из вещей которые прям поломаны вроде все на самом деле. Остальное сырость и недостаток фичей типа const fn
ArrayWithAtMost32Elements можно отнести правда еще к костылям)
Ну, имхо, честно, не самая большая проблема. Там где на перформанс похуй -- велкам ту боксед трейт обджектс
Там где не похуй -- Either
Есть даже отличный крейт
ну ок
Forwarded from Kirill Zaborsky
ну как тебе сказать, у нас все ходы записаны - https://github.com/NixOS/nix/pull/2748
GitHub
Make nix/unpack-channel.nix a builtin builder by edolstra · Pull Request #2748 · NixOS/nix
This rewrites the builder of <nix/unpack-channel.nix> in C++ and Rust. Previously the builder was a shell script. Since this was the only builder that was still a shell script, this a...
[Forwarded from A64m AL256m qn[cores]]
какой самый модный и быстрый считатель loc сейчас?
[Forwarded from Alex Gryzlov]
https://github.com/vmchale/polyglot
какой самый модный и быстрый считатель loc сейчас?
[Forwarded from Alex Gryzlov]
https://github.com/vmchale/polyglot
GitHub
GitHub - vmchale/polyglot: Tool to count lines of source code.
Tool to count lines of source code. Contribute to vmchale/polyglot development by creating an account on GitHub.
Forwarded from AV_N
Функциональное программирование не противоречит численным
методам, а, наоборот, помогает более чётко и кратко сформулировать
задачу: https://keldysh.ru/papers/2019/prep2019_114.pdf
методам, а, наоборот, помогает более чётко и кратко сформулировать
задачу: https://keldysh.ru/papers/2019/prep2019_114.pdf
Forwarded from Snarpix
А почему не сделать select на футуру и oneshot channel, который используется как cancellation token? Вроде рабочий вариант для отмены футуры.
Forwarded from Αλεχ Zhukovsky
symbols = ['a', 'b', 'c']
values = [1, 2, 3]
for x in symbols:
print(x)
squared = [x*x for x in values] # Все плохо. "x" из верхнего "for" затёрт
print(x)Вывод программы будет следующим:
a
3
b
3
c
3Forwarded from Oleg Andreev via @gif
This media is not supported in your browser
VIEW IN TELEGRAM
Forwarded from Zygohistomorphic Prepromorphism🇺🇦
можно считать это одним и тем же?
type family X (p :: Type) :: Type
class X (p :: Type) (a :: Type) | p -> a
Forwarded from Zygohistomorphic Prepromorphism🇺🇦
в обще на TF я могу такое написать, а вот с FD пока не понял как
type family Ext (p :: Type) :: Type
data Ast p
= Add (Ast p) (Ast p)
| Num Integer
| Other (Ext p)
class EvalAst p where
evalAst :: (Ast p -> Integer) -> Ext p -> Integer
data Expr
type instance Ext Expr = Void
instance EvalAst Expr where
evalAst _ x = absurd x
data Mul p = Mul (Ast p) (Ast p)
data MulExpr
type instance Ext MulExpr = Mul MulExpr
instance EvalAst MulExpr where
evalAst go (Mul x y) = go x * go y
eval :: forall p. EvalAst p => Ast p -> Integer
eval = go where
goAst = evalAst @p go
go (Add x y) = go x + go y
go (Num i) = i
go (Other x) = goAst x
main :: IO ()
main = do
print $ eval (Add (Num 20) (Num 10) :: Ast Expr)
Forwarded from Zygohistomorphic Prepromorphism🇺🇦
почему тут не может быть выведен функтор?
class Functor t => ExtF p t a | p -> t a
data AstF p a
= ValF Int
| AddF a a
| OtherF (forall t. ExtF p t a => t a) deriving Functor
Forwarded from Zygohistomorphic Prepromorphism🇺🇦
Couldn't match type ‘b’ with ‘a’
arising from a functional dependency between constraints:
‘ExtF p t a’ arising from a use of ‘a1’ at <playground>:8:51-57
‘ExtF p t b’
arising from a type expected by the context:
forall (t :: * -> *). ExtF p0 t a0 => t a0