Конструктор типа CULLong не отображается при установке pango и GIO с кабалой в Windows

Я пытаюсь установить Threadscope в Windows 8, чтобы следовать книге «Параллельное и параллельное программирование в Haskell».

Я успешно установил пакет GTK+, а затем попытался установить threadscope через Cabal. Установка завершилась со следующей информацией:

cabal: Error: some packages failed to install:
gio-0.12.5.0 failed during the building phase. The exception was:
ExitFailure 1
gtk-0.12.5.0 depends on pango-0.12.5.0 which failed to install.
pango-0.12.5.0 failed during the building phase. The exception was:
ExitFailure 1
threadscope-0.2.2 depends on pango-0.12.5.0 which failed to install.

Значит, что-то случилось с GIO и pango.

Оглядываясь назад на то, что произошло, консоль была заполнена такими сообщениями:

Not in scope: type constructor or class `CULLong'

Эти сообщения следовали, когда компилировались и GIO, и pango, например:

Linking dist/setup-wrapper\setup.exe ...
Configuring gio-0.12.5.0...
Building gio-0.12.5.0...
Preprocessing library gio-0.12.5.0...
[ 1 of 24] Compiling System.GIO.Signals ( dist\build\System\GIO\Signals.hs, dist\build\System\GIO\Signals.o )
[ 2 of 24] Compiling System.GIO.Types ( dist\build\System\GIO\Types.hs, dist\build\System\GIO\Types.o )

System\GIO\Types.chs:1027:31:
    Not in scope: type constructor or class `CULLong'
    Perhaps you meant `CULong' (imported from Foreign.C.Types)

...

и,

Linking dist/setup-wrapper\setup.exe ...
Configuring pango-0.12.5.0...
Building pango-0.12.5.0...
Preprocessing library pango-0.12.5.0...
[ 1 of 14] Compiling Graphics.Rendering.Pango.Types ( dist\build\Graphics\Rendering\Pango\Types.hs, dist\build\Graphics\Rendering\Pango\Types.o )

Graphics\Rendering\Pango\Types.chs:256:29:
    Not in scope: type constructor or class `CULLong'
    Perhaps you meant `CULong' (imported from Foreign.C.Types)

...

Я пытался искать, но я не могу найти ничего, связанного с этим. Помощь приветствуется!


person funky_vodka    schedule 03.01.2014    source источник
comment
Ошибка довольно ясна Не в области: конструктор типа или класс CULLong' Perhaps you meant CULong' (импортирован из Foreign.C.Types). Я проверил модуль System.GIO.Types и в нем есть строка import Foreign.C.Types (CULong(..), CUInt(..)). Этот модуль генерируется автоматически, поэтому какой бы инструмент ни сгенерировал этот файл, он не ожидает, что вам понадобится unsigned long long, но когда запускается c2hs, он решает, что ему нужен unsigned long long. Это может быть много работы, но пробовали ли вы добавить CULLong в список импорта?   -  person user2407038    schedule 04.01.2014
comment
у меня нет. Как бы я это сделал?   -  person funky_vodka    schedule 04.01.2014
comment
Скачайте исходники на hackage, откройте файлы, внесите изменения, установите пакет из этих файлов.   -  person user2407038    schedule 04.01.2014
comment
О, ты имеешь в виду это. Я не пробовал раньше, но я попытаюсь найти, как это сделать. Если вы знаете какие-либо хорошие предложения, я хотел бы услышать. Спасибо! Редактировать: я пошел посмотреть модуль System.GIO.Types на Hackage, но он не может найти страницу, когда я туда захожу. Я также не могу найти модуль в репозитории github. Что случилось с этим?   -  person funky_vodka    schedule 04.01.2014
comment
Ссылка: hackage.haskell.org/package. /gio-0.12.5.0/gio-0.12.5.0.tar.gz внизу страницы. Искать особо нечего, вы буквально открываете каждый файл и добавляете CULLong(..) к импорту, затем cabal configure и cabal install в корневой каталог пакета (папка, содержащая файл .cabal)   -  person user2407038    schedule 04.01.2014
comment
Что ж, теперь произошло что-то совершенно странное — я сделал то, что вы сказали: я извлек файл tar, перешел в каталог GIO, открыл файл System/GIO/Types.chs– и добавил CULLong(..) в строку Foreign.C.Types –import. Затем я запустил cabal configure и cabal install в каталоге с .cabal-файлом, как вы сказали. Но потом я столкнулся с теми же ошибками. Странно то, что сообщения об ошибках выводятся со строки начиная с 1027, как в System\GIO\Types.chs:1027:31: ..., но файл Types.chs имеет длину 1025 строк — там нет вхождений CULLong.   -  person funky_vodka    schedule 04.01.2014
comment
Я не знаю, сколько файлов будет содержать одну и ту же проблему - возможно, все. Вы все еще получаете ошибки для этого конкретного файла? Он короче, потому что это файл .chs, его необходимо обработать с помощью c2hs (который автоматически создает привязки ffi), прежде чем он станет настоящим haskell. Типы, которые будут в конечном файле .hs, зависят от вашей машины, но я не знаю, почему long long заменяется на long.   -  person user2407038    schedule 04.01.2014
comment
Ладно, попробую что-нибудь придумать. Но спасибо за помощь, я узнал от вас несколько полезных вещей.   -  person funky_vodka    schedule 04.01.2014
comment
Хотел бы я помочь больше, но я даже не могу дойти до установки, что-то об отсутствующих файлах заголовков. Удачи.   -  person user2407038    schedule 04.01.2014


Ответы (1)


Как Cabal configure, так и Cabal install, по-видимому, возвращают Types.chs к исходной версии (отсутствует CULLONG(..)).

Похоже, ты хочешь

cabal build
cabal register --global

Что приводит вас к CULLong, пропавшему без вести из Pango. По крайней мере, это прогресс :-P

Добавив CULLong в Pango, мы переходим к новой и еще более захватывающей ошибке:

GraphicsRenderingPongoStructs.hsc:87:21:
    Not in scope: type constructor or class 'Word9150716308491337760'

Затем последовало еще много подобных ошибок. Любые идеи?

person Keldor    schedule 23.01.2014
comment
Да, вы заметите, что Word9150716308491337760 кратно 8. Глядя на проблему в контексте, кажется, что макрос, определенный в template-hsc-gtk2hs.h, генерирует эти странные имена типов. Когда указанный тип является целочисленным, он проверяет, является ли он знаковым или беззнаковым, чтобы определить часть типа Int или Word, а затем добавляет sizeof(t) * 8. Если бы это работало правильно, вы бы получили такие ответы, как, скажем, Int32 для подписанного типа данных, который дает sizeof результат 4. Как это бывает, sizeof вместо этого возвращает результаты, такие как 1143839538561417220. - person Barend Venter; 26.03.2014