Alexander
я не знаю дождусь ли я к концу этой недели
Alexander
впрочем достаточно length (replicate ((maxBound `div 2) + 1) 0`
Alexander
а что ещё возможно для linked list?
Alexander
хранить инфу о длине в каждом узле?
Alexander
да и это не сработает
Alexander
т.к. тогда не построить лениво список
Alexander
да в общем-то нигде не сделаешь нормально
Anatolii
дело не в хаскеле
Anatolii
а в линкед листе наверное
Alexander
принципиально, структура данных такая
Denis
В Си и асме можно :)
Alexander
как?
Anatolii
там же не линкед лист будет
Denis
Посчитать выделенную память и поделить на размер одного элемента?
Alexander
как посчитать выделенную память под одну из структур?
Alexander
это linked list же
Denis
Хм...
Denis
Если делать односвязный список на указателях, действительно никак.
Denis
Что-то туплю
Alexander
в общем-то тут становится очевидно, почему linked list используется очень редко
Alexander
в си-подобных яп
Alexander
и все их ругают
Alexander
ведь как control structure они уже не работают
Denis
Ну да, структура не самая удобная
Alexander
fusion нету
Alexander
deforestation нету
Alexander
ну O(1) push, O(1) pop причем очень дешевые
Denis
А вот интересно (память молчит по этому поводу), насколько эффективно будет сделать список в сишке на базе массивов?
Denis
Кажется, что-то подобное я читал давно, но вообще не могу ничего припомнить.
Denis
Сразу понятно, что проблемы с вставкой и удалением элементов. Зато быстрый поиск?
Denis
Не, бред какой-то. Уж лучше тогда массив и брать как структуру.
Boris
насколько я знаю, списки обычно реализуются на базе структуры dynamic array (по крайне мере в python, c# это так), там в основе лежит массив.
Denis
О как!
Alexander
то, что в java arraylist знаешь?
Alexander
ну и в прочих
Alexander
внутри массив, место кончается выделяем 2x памяти и копируем
Alexander
доступ О(1), добавление амортизированное О(1)
Anatolii
товарищи, а я насчет stack хотел спросить, я же правильно понимаю что мне достаочно на репозиторий stack.yaml положить и у меня будет redproducable build везде?
Alexander
for some definition of reproducible
Alexander
в большинстве случаев - да
Anatolii
у меня вот такой тип есть
data TDEntry = Key String | DSN { dbType :: String
, db :: Maybe String
, host :: Maybe String
, port :: Maybe String
}
Anatolii
а я хочу его таким сделать:
data TDEntry = Key String | Driver DSN | DSN
Anatolii
ну и DSN это такой же рекорд
Anatolii
наверное это уже через чур?:)
Anatolii
уже понял, вынес рекорд в отдельный тип
Anatolii
@DenisLebedev Привет, помнишь мы с тобой тип для парсеров не могли вывести красивый?
Denis
Ну?
Anatolii
там вот такой тип
Anatolii
lines' :: Parser [String]
Denis
Что-то мало параметров
Anatolii
ну вот
Anatolii
--pDSN :: Text.Parsec.Prim.ParsecT String () Data.Functor.Identity.Identity ([Char], [Char])
pDSN :: Parser (String, String)
pDSN = do
string "dsn"
equalsSign
string "dbi:"
dbType <- many (noneOf ":")
char ':'
--dbInfo <- pDBInfo
return (dbType, "")
Anatolii
то что выше это мне GHC вывел
Anatolii
GHCMod
Anatolii
а вон я ниже написал
Anatolii
и оно компилируется
Anatolii
я SO увидел в коде:)
Anatolii
сам не поверил
Denis
Сейчас бы еще объяснение, почему так выходит.
Denis
Какая-то маскировка типов?
Anatolii
это может @qnikst нам поможет:)
Alexander
А что?
Anatolii
вот код
Anatolii
--pDSN :: Text.Parsec.Prim.ParsecT String () Data.Functor.Identity.Identity ([Char], [Char])
pDSN :: Parser (String, String)
pDSN = do
string "dsn"
equalsSign
string "dbi:"
dbType <- many (noneOf ":")
char ':'
--dbInfo <- pDBInfo
return (dbType, "")
Anatolii
закоментированная строка первая
Anatolii
тип который GhcMod вывел
Anatolii
после него я написал тип руками
Anatolii
и то и то компилится
Anatolii
мы с @DenisLebedev не понимаем как так это просходит:)
Alexander
А что не так? Он парсект или какой там type раскрыл
Anatolii
Parser - это алиас на вот то что сверху?
Anatolii
и да, это тоже
Alexander
А ошибка какая? Может что не импортировпно?
Anatolii
сейчас попробую
Anatolii
опять
Denis
Не импортированы модули Parsec были, использовались комбинаторы. Но ведь без явного указания типов все работало! И тип ghci выводил, а использовать его не давал.
Denis
Text.ParserCombinators.Parsec.Prim