Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Haskell gtk Install Type Conflicts

The basic problem:

I'm attempting to install Haskell's gtk package using the standard mac instructions on OSX 10.10.4. Specifically, I want to run threadscope, so I need gtk. Early stages with homebrew and the gtk buildtools work fine, but when I

cabal install gtk

or use

cabal install --with-gcc=gcc-4.8 gtk

I get the following compilation error:

Graphics/UI/Gtk/Embedding/Plug.chs:120:6:
Couldn't match expected type ‘Ptr ()’
            with actual type ‘Maybe DrawWindow’
In the first argument of ‘gtk_plug_new’, namely
  ‘(fromNativeWindowId (fromMaybe nativeWindowIdNone socketId))’
In the second argument of ‘($)’, namely
  ‘gtk_plug_new
     (fromNativeWindowId (fromMaybe nativeWindowIdNone socketId))’

Graphics/UI/Gtk/Embedding/Plug.chs:137:6:
Couldn't match expected type ‘Ptr ()’
            with actual type ‘Maybe DrawWindow’
In the second argument of ‘\ (Display arg1) arg2
                             -> withForeignPtr arg1
                                $ \ argPtr1 -> gtk_plug_new_for_display argPtr1 arg2’, namely
  ‘(fromNativeWindowId (fromMaybe nativeWindowIdNone socketId))’
In the second argument of ‘($)’, namely
  ‘(\ (Display arg1) arg2
      -> withForeignPtr arg1
         $ \ argPtr1 -> gtk_plug_new_for_display argPtr1 arg2)
     display
     (fromNativeWindowId (fromMaybe nativeWindowIdNone socketId))’

Graphics/UI/Gtk/Embedding/Plug.chs:151:3:
Couldn't match type ‘Ptr ()’ with ‘Maybe DrawWindow’
Expected type: IO (Maybe DrawWindow)
  Actual type: IO (Ptr ())
In the second argument of ‘($)’, namely
  ‘(\ (Plug arg1)
      -> withForeignPtr arg1 $ \ argPtr1 -> gtk_plug_get_id argPtr1)
     (toPlug self)’
In the expression:
  liftM toNativeWindowId
  $ (\ (Plug arg1)
       -> withForeignPtr arg1 $ \ argPtr1 -> gtk_plug_get_id argPtr1)
      (toPlug self)
cabal: Error: some packages failed to install:

I previously had Haskell's gtk library and threadscope application installed and running before I updated my Haskell platform from ghc 7.8.4 to ghc 7.10.2. At first I assumed an installation conflict, but I've repeatedly removed the Haskell platform from my system using the thorough removal instructions and reattempted the threadscope installation with no success. I've even removed and re-installed the underlying gtk+ and related packages using homebrew, again no success.

I'm not sure where the types Ptr () and Maybe DrawWindow originate and therefore where the conflict could be coming from. Any ideas on what could be going wrong would be welcome!

like image 929
G. A. Newman Avatar asked Oct 13 '15 14:10

G. A. Newman


2 Answers

maybe you could try to install gtk with this line

cabal install gtk -fhave-quartz-gtk

like image 95
Max K Avatar answered Sep 19 '22 13:09

Max K


There is a recipe for installing GTK and threadscope at edsko's blog:

http://www.edsko.net/2015/03/09/sandboxes-revisited/

Search the page for "GTK sandbox".

Update

I was able to build threadscope using the above instructions with ghc-7.10.2.

The specific commands I used:

export PATH=/opt/X11/lib/pkgconfig
brew install gtk+                      # installed gtk+-2.24.25
brew install poppler                   # installed poppler-0.35.0
cabal sandbox init
cabal install gtk2hs-buildtools
cabal install gtk
cabal install poppler --with-gcc=gcc-4.9 --extra-include-dirs=/usr/local/include
cabal install threadscope

The specific versions of packages installed in the sandbox:

cairo-0.13.1.0
ghc-events-0.4.4.0
gio-0.13.1.0
glib-0.13.2.1
gtk-0.13.9
hashtables-1.2.0.2
pango-0.13.1.0
poppler-0.13.1
utf8-string-1.0.1.1
like image 42
ErikR Avatar answered Sep 19 '22 13:09

ErikR