@haskellru

Страница 106 из 1551
Index
25.08.2016
17:21:59
А по факту это надо буквально понимать -- программирование на уровне типов

Когда компилятор выполняет какие-либо функции в процессе тайпчека.

Когда система типов представляет сама собой язык программирования.

Например, редукция семей типов -- это основное средство type level программирования в Хаскеле

Google
Мерлин
25.08.2016
17:24:01
Index
25.08.2016
17:25:04
Ну да, они тьюринг полны

Denis
25.08.2016
18:31:17
Те же яйца, только в профиль.

Спросил таки у гугла, что это за зверь такой, type-level programming.

Гугл ответил, что это какая-то малопонятная плебень, которая, судя по всему, интересна только скалистам и хаскелистам.

Anatolii
25.08.2016
18:34:24
а может кто по Parsec проконсультировать?

Denis
25.08.2016
18:34:30
А в википедии есть две статьи, про functional-level и value-level programming, из которых можно вывести примерно, что же может скрываться под этим загадочным названием.

Anatolii
25.08.2016
18:35:19
parseTDB = parse tdbfile "invalid file format" tdbfile = do result <- many myLine eof return result myLine = do content <- many (noneOf "\n") eol return content <?> "Line error" eol = try (string "\r\n") <|> string "\n" <|> string "\r" <?> "end of line"

*Ch16 Text.ParserCombinators.Parsec> parseTDB "dasfasdsa\nxdsadsa\n" Right ["dasfasdsa","xdsadsa"]

тоесть просто бьется по \n строчки

но если последний \n убрать

то все ломается

ну потому что вместо eol там eof вылетает

Google
Anatolii
25.08.2016
18:37:39
но я никак не могу соединить eol и eof

там бы какой-то OR

Denis
25.08.2016
18:38:43
А eof где определен?

Anatolii
25.08.2016
18:38:57
eof в Parsec есть

У eof вот такой :t eof :: (Show t, Text.Parsec.Prim.Stream s m t) => Text.Parsec.Prim.ParsecT s u m ()

Denis
25.08.2016
18:40:09
Хм сейчас запущу у себя ghci

Anatolii
25.08.2016
18:40:18
а у eol eol :: Text.Parsec.Prim.ParsecT [Char] u Data.Functor.Identity.Identity String

вот такой

Denis
25.08.2016
18:40:48
Блин, тут код читать невозможно

Anatolii
25.08.2016
18:40:48
вот такие импорты нужны import Text.ParserCombinators.Parsec import Data.Char

import Text.ParserCombinators.Parsec import Data.Char parseTDB = parse tdbfile "invalid file format" tdbfile = do result <- many myLine eof return result myLine = do content <- many (noneOf "\n") eol return content <?> "Line error" eol = try (string "\r\n") <|> string "\n" <|> string "\r" <?> "end of line"

ну вот так скопируй

основная беда что у eof и у eol типы не сходятся

@DenisLebedev есть успехи?:)

Denis
25.08.2016
18:49:19
Atom обновляет плагины. Система занята...

Это пиздец какой-то. i3, 4 гига...

melancholiac
25.08.2016
18:50:07
че ща атом?

за*

Denis
25.08.2016
18:50:36
https://atom.io/

melancholiac
25.08.2016
18:50:45
оу

Google
melancholiac
25.08.2016
18:50:52
ну так что ты хотел

он и у меня зело тормознутый

Denis
25.08.2016
18:51:10
То, из чего Electron родился.

melancholiac
25.08.2016
18:51:53
Anatolii
25.08.2016
18:52:37
ну пока у тебя плагины обновляются у мнея другой вопрос:) Кто-то NixOS пробывал?

ну так что бы переехать полностью и поработать с этим

melancholiac
25.08.2016
18:53:36
понел шо за электрон

ну че поделаешь

/dev
25.08.2016
19:18:13
Нервно вспомнил шаблоны в c++
/me с наслаждением пошёл перечитывать Александреску

Aldar
25.08.2016
19:30:23
type level programming это метапрограммирование на с++ шаблонах например

или разработка на языке с dependent types типа идриса, верно.7

Denis
25.08.2016
19:40:14
Любопытно.

Denis
25.08.2016
19:40:59
Похоже, с помощью комбинаторов вообще невозможно распарсить строку, которая не заканчивается одним из ожидаемых символов.

Сейчас посмотрю повнимательнее, конечно...

Anatolii
25.08.2016
19:47:26
Я уже комп выключил

Я там видел count

Может через него можно проверить длину остатка?

Завтра в гиттере спрошу

Может там кто подскажет

Конечно как вариант, когда такой файл вычитываешь откуда-то то можно проверить построений символ и поставить \n если его там нету

Google
Anatolii
25.08.2016
19:51:17
Костыль конечно

Должно быть более элегантное решение

Denis
25.08.2016
22:35:42
import Control.Monad import Data.Char import Text.ParserCombinators.Parsec parseTDB = parse tdbfile "invalid file format" tdbfile = do result <- manyTill myLine eof return result myLine = do content <- manyTill anyToken eol return content eol = try (void (string "\r\n")) <|> void (string "\n") <|> void (string "\r") <|> eof <?> "end of line"

Заебался я что-то с этим парсеком...

Но вообще задача странная, если честно.

Иван
25.08.2016
22:47:58
Всем привет. Я не так давно изучаю хаскель, только что баловался с ним и наткнулся на такое: Prelude> length $ 1:(take maxBound $ repeat 1) -2147483648 Prelude> :t length length :: [a] -> Int Почему [a] -> Int, хаскель?

Почему не [a] -> Integral или [a] -> Num или [a] -> Integer

Как работать со списками длиннее, чем maxBound :: Int ?

Denis
25.08.2016
22:50:03
Определи свою функцию для вычисления длины.

Только вот разумно ли работать со столь длинными списками?

Admin
ERROR: S client not available

Иван
25.08.2016
22:52:19
А как же стандартная библиотека? Code reuse? Ребята, которые над ней горбатились ведь могли это время прожить. Хочу пользоваться плодами их труда

Prelude> :t take take :: Int -> [a] -> [a]

опять веселье. такими темпами меня заставят всю библиотеку переопределить

Только вот разумно ли работать со столь длинными списками?
А вот perl6 не говорит мне, что разумно, а что нет. Он просто делает, что я говорю.

А вы когда пишете свой код, не имеющий side effects, вы думаете о том, как ваша программа себя поведет при списках такой длинны?

Ладно, пусть по неизвестной причине рнзультат length имеет тип Int. Но почему его переполнение не выкидывает исключение? Как это делает succ maxBound :: Int

Иван
25.08.2016
23:39:52
автор в книжке "learn you a haskell for great good" специально обратил на это внимание

Он говорит, что хз зачем это так сделали, наверное исторически сложилось

Google
Иван
25.08.2016
23:40:59
Так что я бы поставил на то, что это ожидаемое поведение

И всем известное

corpix
26.08.2016
00:01:11
Этих "исторически известных поведений" вон целый сиплюплюс. Я думаю что такие недочеты нужно править, стремясь к консистентному поведению(потому что от этого людям станет проще и приятнее пользоваться языком).

Anatolii
26.08.2016
04:24:30
@DenisLebedev Спасибо, работает, буду разбираться как ты это сделал:) а насчет странности, я вот такой файл хочу распарсить http://search.cpan.org/dist/Test-Database/lib/Test/Database.pm#FILES

нидавно писал парсер на go

ну и ты же понимаешь что в конце может и не быть \n

я вот начал с малого

разбития на строчки:)

Denis
26.08.2016
04:26:05
Для этого есть функция lines. Потому и странная задача.

Anatolii
26.08.2016
04:26:45
ты вообще спишь?:)

я уже спал а ты ответил:)

я проснулся и ты тут:)

я может еще не понял как этим Parsec пользоваться

но чтобы файлик распарсить, надож е его разбить на строки саначала

Denis
26.08.2016
04:28:16
ты вообще спишь?:)
В данный момент сплю, на работе :)

Я вчера уснуть не смог, пока не решил эту гребаную задачу!

Anatolii
26.08.2016
04:28:52
ну круто конечно

Denis
26.08.2016
04:29:49
но чтобы файлик распарсить, надож е его разбить на строки саначала
Тут ты не прав. В структуре твоего файлика есть секции, а в секциях встречаются поля с одинаковыми наименованиями. Так что просто разбив на строчки файл ты получишь просто мешанину из данных.

Лучше пропиши нормальный парсер, который будет парсить сразу секциями

Anatolii
26.08.2016
04:30:24
...

да

что-то я не стой стороны пошел

я вчера просто только начал Parsec играться

Страница 106 из 1551