Alexander
как там явно показывать типы по очереди, чтобы дырки заполнять?
Timofey
Вопрос по stack dot- он умеет графы зависимостей для проектов с несколькими executables?
Timofey
у меня в проекте их два, binary1 и binary2, команда stack dot binary2 всё равно строит граф для binary1
undefined
А если попробовать stack dot :binary2?
Cheese
странно
Cheese
может, 2 зависит от 1?
Cheese
судя по справке, он должен отдельно с компонентом работать
Cheese
executables в разных пакетах или в одном?
Timofey
А если попробовать stack dot :binary2?
попробовал, не помогло
Timofey
Есть подозрение, что он строит один граф для проекта целиком
Cheese
должен обрезать
Cheese
вторая программа зависит от первого пакета?
Timofey
кажется. он учитывает name из projectName.cabal
Cheese
кажется. он учитывает name из projectName.cabal
конечно, как-то учитывает
Timofey
вторая программа зависит от первого пакета?
нет. Два экзешника зависят от одной либы, экзешники друг от друга не зависят
Cheese
строго говоря, нельзя зависеть от либы как компонента, только от пакета целиком
Cheese
нет, всё правильно, это очень тонкая тонкость
Timofey
в таком случае да, оба экзешника завсят от всего пакета
Cheese
если программа Б зависит от пакета А, то программы в пакете А тоже должны собираться для Б
Cheese
или общая библиотека в третьем пакете?
undefined
Похоже, что таки не умеет. Цитата: Side note: When any exe component is specified, all of the package's executable components will be built. This is due to limitations in all currently released versions of Cabal. See issue#1046 https://docs.haskellstack.org/en/v1.7.1/build_command/#target-syntax
Timofey
name: projectName library: ... executables: binary1: dependencies: - projectName - optparse-applicative binary2: dependencies: - shake - projectName
Timofey
выдержка из package.yaml
Timofey
ты выше говорил, что разные пакеты
значит, я неправильно понял вопрос
Timofey
и перепутал модули и пакеты =|
Cheese
вряд ли модули
Cheese
проект (stack.yaml) состоит из пакетов (package.yaml | *.cabal)
Cheese
пакет — из компонентов
Cheese
компонент = библиотека | программа | тест
Cheese
у тебя здесь один проект, один пакет, 3 компонента
Cheese
а собирать одну программу из пакета Кабал не умеет
Cheese
поэтому граф для binary2 включает и binary1
Timofey
Спасибо, теперь стало ясно =)
Cheese
если разнести по разным пакетам, то, может, будет лучше
Alex
Господа, а как узнать в мегапарсеке, что парсер зафейлил?
Cheese
для чего?
Cheese
p1 <|> p2 — если начался p2, то p1 зафэйлил, например
Alex
Вот такой код pos :: Parser Position pos = do posName <- clexem c <- anyChar if c == ',' then return $ Position posName "" else if c == '=' then do posValue <- clexem try $ char ',' return $ Position posName posValue else return $ Position posName ""
Alex
c <- anyChar в вот этот момент парсер может зафейлить и если это так, то мне нужно не выполняться дальше
Alex
Как это сделать?
Alex
Try не подходит, потому, что я не знаю успешно он там отработал или нет
Dmitry
if ... else if... лучше на case заменить.
Alex
Справедливо
Maxim
парсер же и так зафейлится весь если какая-то его часть фейлится, зачем что-то еще городить?
Maxim
(или я не понял?)
Alex
Мне нужно что в стиле try, который дает понять, сфейлилось оно там внутри или нет
Alex
Не подскажите?:)
Dmitry
c <- anyChar `onException` return '$'
Dmitry
Смотри Control.Monad.Catch, ищи функции по вкусу
Ilya
эксепшены в парсере это нормально?
Alex
Почему-то фейлиться вот так
Alex
``` c <- anyChar onException return $ Position posName "" ```
Alex
c <- anyChar `onException` return `$` Position posName ""
Alex
Не компилится
Alex
Вот такая ошибка
Alex
parse error on input `$'
Dmitry
return (Postion posName "")
Alex
c <- anyChar `onException` return (Position posName "")
Alex
Вот такая ошибка
Alex
No instance for (Control.Monad.Catch.MonadCatch (ParsecT Void String Data.Functor.Identity.Identity)) arising from a use of `onException'
Alex
Я неправильно написал?
Cheese
какие ещё исключения? несовпадения в парсере не бросают исключения
Cheese
попробуй через <|>
Cheese
кстати, это какой парсек?
Alex
мега
Alex
megaparsec
Alex
Эта штука не поможет, потому, что тогда я не смогу узнать что в c
Alex
Я кажется придумал грязный хак
Alex
то есть мне нужно будет проверить как в стиле if c == undefined
Alex
?
Alex
Я знаю
Ilya
сдается мне, ты хочешь optional