Size: a a a

2020 February 22

DF

Dollar Føølish in rust_offtopic
Foo None = None?
источник

а

а это кто in rust_offtopic
Alex Zhukovsky
foo :: (Functor f) => f Int -> f Int
Если я определю foo вот так, то "возвращает нулл когда аргумент нулл" будет неверно

foo :: (Functor f) => f Int -> f Int
foo Nothing = foo (Just 5)

то есть типчики не смогли выразить "возвращает нулл когда аргумент нулл"
источник

а

а это кто in rust_offtopic
вот изначальное утверждение
источник

а

а это кто in rust_offtopic
Как мне проаннтоировать что "возвращает нулл если аргумент нулл"? Как мне сделать Some(None)?
источник

AZ

Alex Zhukovsky in rust_offtopic
а это кто
Если я определю foo вот так, то "возвращает нулл когда аргумент нулл" будет неверно

foo :: (Functor f) => f Int -> f Int
foo Nothing = foo (Just 5)

то есть типчики не смогли выразить "возвращает нулл когда аргумент нулл"
ну если ты прям так хочешь доказать то можно и это проверить
источник

AZ

Alex Zhukovsky in rust_offtopic
interface Functor f => VerifiedFunctor (f : Type -> Type) where
 functorIdentity : {a : Type} -> (g : a -> a) -> ((v : a) -> g v = v) -> (x : f a) -> map g x = x
 functorComposition : {a : Type} -> {b : Type} -> (x : f a) ->
                      (g1 : a -> b) -> (g2 : b -> c) ->
                      map (g2 . g1) x = (map g2 . map g1) x

VerifiedFunctor Maybe where
 functorIdentity _ _ Nothing = Refl
 functorIdentity g p (Just x) = rewrite p x in Refl
 functorComposition Nothing g1 g2 = Refl
 functorComposition (Just x) g1 g2 = Refl
источник

AZ

Alex Zhukovsky in rust_offtopic
ну вот например так проверяется что мейби от нан это нан, а от джаста это джаст
источник

AZ

Alex Zhukovsky in rust_offtopic
по аналогии можно написать для нашего foo
источник

AZ

Alex Zhukovsky in rust_offtopic
Dollar Føølish
Foo None = None?
источник

AZ

Alex Zhukovsky in rust_offtopic
а это кто
Если я определю foo вот так, то "возвращает нулл когда аргумент нулл" будет неверно

foo :: (Functor f) => f Int -> f Int
foo Nothing = foo (Just 5)

то есть типчики не смогли выразить "возвращает нулл когда аргумент нулл"
Тогда твоя такая реализация не тайпчекнется
источник

а

а это кто in rust_offtopic
а это кто
Если я определю foo вот так, то "возвращает нулл когда аргумент нулл" будет неверно

foo :: (Functor f) => f Int -> f Int
foo Nothing = foo (Just 5)

то есть типчики не смогли выразить "возвращает нулл когда аргумент нулл"
Хотя если взять более реальный пример

foo :: (Functor f) => f a -> f a

в котором у функции foo нет доступа к конструктору типа "a", то тогда действительно, функция foo будет возвращать None если аргумент None, потому что Some она сделать не сможет
источник

AZ

Alex Zhukovsky in rust_offtopic
это тоже вариант, но иногда конкретные типы нам могут быть интересны
источник

В

Вафель in rust_offtopic
а это кто
const fn() -> i32 {
   let mut vec = Vec::new();
   for i in 0..10 {
       vec.push(i * 2);
   }

   vec.iter().sum()
}


Вот искусственный пример как можно полезно применить вектор в const fn. Но нельзя так как в const fn почему-то запрещены аллокации
Проблема в том что  компилятору надо

1) проверить что данные которые были доступны только в компайл-тайме, не утекут в рантайм мёртвыми указателями вперёд (я хз как такое сделать)

2) для этого нужно скомпилировать этот кусок кода и выполнить. Это почти как процедурные макросы...
источник

а

а это кто in rust_offtopic
Вафель
Проблема в том что  компилятору надо

1) проверить что данные которые были доступны только в компайл-тайме, не утекут в рантайм мёртвыми указателями вперёд (я хз как такое сделать)

2) для этого нужно скомпилировать этот кусок кода и выполнить. Это почти как процедурные макросы...
1) наверное решается тем, чтобы разрешать хранить в результирующих const глобалах только Copy типы. Ведь никакие Copy типы не содержат указателей, хотя это может быть слишком строгое ограничение
источник

В

Вафель in rust_offtopic
а это кто
1) наверное решается тем, чтобы разрешать хранить в результирующих const глобалах только Copy типы. Ведь никакие Copy типы не содержат указателей, хотя это может быть слишком строгое ограничение
Фанфакт: поинтер это копи тип (пруф)
источник

p

polunin.ai in rust_offtopic
Подскажите дополнительную хеш-функцию для двойного хеширования в хеш-таблице
источник

p

polunin.ai in rust_offtopic
Какую-то попроще
источник

а

а это кто in rust_offtopic
Вафель
Фанфакт: поинтер это копи тип (пруф)
:(
источник

DF

Dollar Føølish in rust_offtopic
источник

DF

Dollar Føølish in rust_offtopic
Симона вот
источник