@haskellru

Страница 1245 из 1551
0x739d6cd673fffb80
05.06.2018
13:40:35
Всем доброго дня

Я к вам тут с проблемой. Давно тащусь от хаскеля, но не было времени сесть и попрактиковаться в нем. Олимпиадные задачки и codewars уже поднадоели. Но как только попробовал прикрутить к своей программке одну си-библиотеку для графики, немедленно выяснилось, что GHC на дух не переносит struct, которые там и сям раскиданы по системным библиотекам Си. Как быть? При том, что графическую оболочку проги на Си хочется.



На месте parse error стоит именно сишная struct. Удалил для проверки место со структурой - он ругнулся на другую структуру в следующем файле

Google
Aleksey
05.06.2018
14:19:26
внезапно require уже умеет почти человеческие импорты: require Data.HashMap.Strict as HM (HashMap) превращает в import Data.HashMap.Strict (HashMap) import qualified Data.HashMap.Strict as HM

0x739d6cd673fffb80
05.06.2018
14:32:12
Там не в импортах дело. Мне нужно утащить несколько Си-функций для графики через FFI, но компилятор стопорится на каждой увиденной структуре, типа struct { int __val[2]; }. Parse error и все тут. При том, что другие сишные конструкции он парсит без проблем

Aleksey
05.06.2018
14:34:21
А это я так написал, безотносительно проблемы с Си - на эту тему мне, увы, нечего сказать, т.к. сам я ничего сишного не оборачивал :(

Dmitry
05.06.2018
15:03:57
А код, где у тебя ffi можешь показать? Возможно, проще будет сделать промежуточный c++-файл, который встраивается в hs, и который вызывает C-функции. Ещё можно посмотреть пакет inline-c. Ну и у нас главный спец по связям - @qnikst, его спроси. Я только завтра смогу помочь (с этой проблемой сталкивался, но нужно код посмотреть)

@unknown_no_3861 ^

0x739d6cd673fffb80
05.06.2018
15:16:31
А код, где у тебя ffi можешь показать? Возможно, проще будет сделать промежуточный c++-файл, который встраивается в hs, и который вызывает C-функции. Ещё можно посмотреть пакет inline-c. Ну и у нас главный спец по связям - @qnikst, его спроси. Я только завтра смогу помочь (с этой проблемой сталкивался, но нужно код посмотреть)
Первоначальный код (его там совсем мало было, обертка и все) я снес, полагая, что что-то напортачил, и попытался скомпилировать код с https://wiki.haskell.org/FFI_Introduction Единственное - заменил {-# INCLUDE #-} на #include с расширением CPP

Но ошибки при компиляции не поменялись совершенно

Та же Parse Error. ИЧСХ, в той же самой либе

Dmitry
05.06.2018
15:19:12
Не, там не через include надо

Глянь inline-c пакет

Завтра подробнее смогу ответить. У меня сейчас ночь

Aleksey
05.06.2018
15:19:53
не уверен что он есть
да короче оказалось что у меня гентупроблемы лол

Google
0x739d6cd673fffb80
05.06.2018
15:50:49
Глянь inline-c пакет
Выглядит очень впечатляюще. Но при компиляции примера из ридми пакета ошибка сегментирования

Через кабал установился нормально

0x739d6cd673fffb80
05.06.2018
17:59:11


Евгений
05.06.2018
18:04:04
У тебя убунта?

0x739d6cd673fffb80
05.06.2018
18:04:16
Хамелеон

Евгений
05.06.2018
18:06:16
Короче я не знаю что это такое, но тебе нужно поставить gnu ld...

Andrei
05.06.2018
18:08:12
или binutils-gold, емнип

Abbath
05.06.2018
22:18:35
Котаны, а что там с Intermediate Haskell

Половина 2018 уже прошла

Антон
05.06.2018
22:21:47
Abbath
05.06.2018
22:22:01
Книга

Антон
05.06.2018
22:23:20
Книга
Перевод или от какого-то англоязычного автора?

Книга
Я просто Новичок в Haskell

Abbath
05.06.2018
22:25:47
Ни то ни другое

Антон
05.06.2018
22:26:45
Ни то ни другое
А что тогда?

Abbath
05.06.2018
22:26:47
Англоязычная книга от русскоязычных авторов

Походу мертвая немношк

Антон
05.06.2018
22:27:11
На русском и так мало материала

Google
Антон
05.06.2018
22:27:57
Fuck my mind

Abbath
05.06.2018
22:28:12
Зачем тебе на русском?

Антон
05.06.2018
22:28:41
Abbath
05.06.2018
22:29:34
Мало же материала, сам говорил

Антон
05.06.2018
22:31:39
Ну вот

Abbath
05.06.2018
22:33:03
Ну я на английском все читаю. Брат жив, зависимости нет

Index
05.06.2018
22:43:59
Парсер GHC это такая помойка, такой бардак, такой кошмар, уххх, никак не отойду.

Сейчас пришлось там рыться.

Лучше, конечно, я ничего предложить не могу, там просто всё плохо из-за ужасного синтаксиса Хаскеля. Например, ~ используется и для laziness annotations, и для equality constraints.

То есть проблема в большей мере в задаче, а не реализации. Парсить Хаскель - это смерть

Со всеми расширениями если

Abbath
05.06.2018
22:58:25
Кресты попарси

Пасер крестов это 1.15 мегабайт сишного кода

почти 40k строк

Index
06.06.2018
00:08:44
Да кресты нейронкой парсить надо

Обучить ее на куче кода, чтобы отличала >> в темплейтах от оператора

Dmitry
06.06.2018
03:39:41
Подскажите, а есть какие-нибудь пакеты, чтобы запускать ghci (ну или вообще repl) в haskell-проекте? Чтобы смотреть состояния переменных и т.п.

Andrey
06.06.2018
03:57:37
а проект чем управляется? так, stack repl, например

Dmitry
06.06.2018
03:59:55
Не, я имею ввиду, в запущенной программе

Например, чтобы можно было подключиться к какому-нибудь порту и получить repl к внутренностям программы.

Google
Dmitry
06.06.2018
04:02:24
Ну типа ekg

Только для моих глобальных переменных.

Пока мы тут, в чятике, бесплатно советы друг другу даём, ребята уже вовсю это дело монетизируют: https://monadfix.io/

? animufag ?
06.06.2018
04:51:39
Да и можешь присоединиться к ним

Dmitry
06.06.2018
04:53:15
Брать по $100/mo за участие в этом чятике?

Подумаю над этим

Andrey
06.06.2018
04:59:32
или не брать ничего

Aleksey
06.06.2018
05:09:31
Не, я имею ввиду, в запущенной программе
Запущенная программа уже скомпилирована, никакого REPL к ней не подключить - это вам не интерпретируемая кложура. Но можно запустить REPL, оттуда сделать forkIO main и, пока программа работает в фоне, тыкать в переменные (а они правда переменные? IORef/MVar/вот это всё?)

Alexander
06.06.2018
05:47:11
на канале 1/3 активны

Aleksey
06.06.2018
06:12:56
В скомпиленой программе не встроен компилятор

Alexander
06.06.2018
06:12:58
или даже startReplWith a -> IO ()

так ты компилируешь ее сам с этой функцией, можно и компилятор встроиь

Aleksey
06.06.2018
06:13:28
Для работы REPL нужен компилятор

Alexander
06.06.2018
06:13:32
через зависимости отладчика

Aleksey
06.06.2018
06:13:33
Нельзя

Yuriy
06.06.2018
06:13:34
компилятор чисто механически можно встроить, сложно объекты прокинуть

Alexander
06.06.2018
06:13:57
если я не ошибаюсь, в тот мже xmonad встроен комплиятор для чтения конфигов

Google
Aleksey
06.06.2018
06:14:03
не встроен

Внешний вызывается. Потом бинарник себя заменяет на новую копию

Alexander
06.06.2018
06:14:20
а, понял

Aleksey
06.06.2018
06:15:28
Есть всякие интерпретаторы хаскеля, которые можно встраивать. Но это не полноценный GHC - поделки для обработки "скриптов на хаскеле"

Alexander
06.06.2018
06:16:13
ну если туда можно пробросить переменные - почему бы и нет?

Aleksey
06.06.2018
06:17:01
Есть у меня сомнения, что из такого интерпретатора можно многое посмотреть. Только если какие рефы пробросить явно

Yuriy
06.06.2018
06:17:32
а ещё можно наоборот — запускать ghci, а из него — программу. только будет тормозить

теоретически, ghci мог бы подключаться к работающему процессу как отладчик (gdb так умеет). нет у него такой функции?

Dmitry
06.06.2018
06:20:12
Ну, в конце концов, можно ж объект (содержимое MVar) сериализовать и показывать его в localhost:5555 (к примеру) в какой-нить web-формочке. Ну и редактировать и десериализировать его обратно. Просто хотелось бы к этому "голому" редактированию добавить всякие Haskell-плюшки, то, что даёт ghci.

теоретически, ghci мог бы подключаться к работающему процессу как отладчик (gdb так умеет). нет у него такой функции?
Ну вот у меня смутное воспоминание, что пару месяцев назад тут прям готовое решение предлагалось. Потому и спрашиваю.

Yuriy
06.06.2018
06:22:14
а ещё можно для gdb написать модули для отображения сырых данных в более близком к языку виде. для Питона такие есть, например

Евгений
06.06.2018
06:22:36
А разве не бывает ghci as library?

Иначе как эти вашт ide-приблуды работают?

Alexander
06.06.2018
06:23:51
ghc-mod

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