169 похожих чатов

Хочется на хаскеле сделать такую штуку - тип вектора с

размером. Чтобы в сигнатурах функций проверялось что все аргументы-векторы одной длины. https://wiki.haskell.org/The_Monad.Reader/Issue5/Number_Param_Types тут нашел как подобное сделать, н оне понятно как обявить функцию конкатенации - чтоб на входе вуктора длин x и y, а на выходе x+y. Как такую функцию объявить с типом вектора из примера в ссылке?

9 ответов

15 просмотров

https://www.parsonsmatt.org/2017/04/26/basic_type_level_programming_in_haskell.html

Alexey-Kholodkov Автор вопроса
Danil Berestov
https://www.parsonsmatt.org/2017/04/26/basic_type_...

Спасибо, то что нужно. Как такие вектора будут работать под капотом? Будет односвязный список или ghci додумается в сплошную оласть памяти элементы вектора положить?

Alexey-Kholodkov Автор вопроса
Danil Berestov
https://www.parsonsmatt.org/2017/04/26/basic_type_...

Не пойму как из типа такого вектора доставать длину. import Data.Number.Peano newtype SizedArray (size :: Nat) i a = SizedArray (Array i a) deriving (Eq, Show) repeat_arr :: SizedArray s i2 a2 -> a -> SizedArray s Int a repeat_arr _ x = let ln = (fromPeano s)::Int in SizedArray $ listArray (0, pred ln) (replicate ln x) вот пытаюсь написать функцию которая создаст массив с размером из типа, но не получается посчитать ln: Variable not in scope: s

1) ScopedTypeVariables 2) forall size i a. ... 3) KnownNat size

Alexey Kholodkov
Не пойму как из типа такого вектора доставать длин...

значение, зависящее от типа — это тайпкласс

Alexey-Kholodkov Автор вопроса
Danil Berestov
1) ScopedTypeVariables 2) forall size i a. ... 3) ...

2) что значит forall? то что я пока нагуглил говорит что это объявляет что любые типы подойдут, но тоже самое будет значить и сигнатура без forall 3) KnownNat это что?

Alexey Kholodkov
2) что значит forall? то что я пока нагуглил говор...

2. в контексте ScopedTypeVariables у квантора forall появляется ещё один смысл

Alexey-Kholodkov Автор вопроса

Как без экземпляра тип в функцию передать?

Alexey Kholodkov
Как без экземпляра тип в функцию передать?

Ещё через Proxy делают, хотя с TypeApplications проще

Похожие вопросы

Обсуждают сегодня

а через ESC-код ?
Alexey Kulakov
29
30500 за редактор? )
Владимир
47
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
13
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
program test; {$mode delphi} procedure proc(v: int32); overload; begin end; procedure proc(v: int64); overload; begin end; var x: uint64; begin proc(x); end. Уж не знаю...
notme
6
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
6
вы делали что-то подобное и как? может есть либы готовые? увидел картинку нокода, где всё линиями соединено и стало интересно попробовать то же в ddl на lua сделать. решил с ч...
Victor
8
Ребят в СИ можно реализовать ООП?
Николай
33
Подскажите пожалуйста, как в CustomDrawCell(Sender: TcxCustomGridTableView; ACanvas: TcxCanvas; AViewInfo: TcxGridTableDataCellViewInfo; var ADone: Boolean); получить наз...
A Z
7
Карта сайта