3

OpenGL チュートリアルを試しています。Haskell Platform がインストールされた状態で macosx を実行しています

import Graphics.Rendering.OpenGL
import Graphics.UI.GLUT

main :: IO ()
main = do
  (progname, _) <- getArgsAndInitialize
  createWindow "Hello World"
  displayCallback $= display

display :: IO ()
display = do
  clear [ ColorBuffer ]
  flush

これは私が得ているエラーです。「clear」、「ColorBuffer」、および「Flush」に対して次が繰り返されます

Hello_World.hs:8:19:
    Ambiguous occurrence `$='
    It could refer to either `Graphics.Rendering.OpenGL.$=',
                             imported from `Graphics.Rendering.OpenGL' at Hello_World.hs:1:1-32
                             (and originally defined in `Data.StateVar')
                          or `Graphics.UI.GLUT.$=',
                             imported from `Graphics.UI.GLUT' at Hello_World.hs:2:1-23
                             (and originally defined in `OpenGL-2.2.3.1:Graphics.Rendering.OpenGL.GL.StateVar')

このコードは以前は機能していましたが、それ以来、cabal install と自作でいくつかのパッケージをインストールしました。

私はそれがパッケージと関係があるかもしれないと思うので、ここに「ghc-pkgリスト」があります(ブロックして申し訳ありませんが、役立つかもしれない追加情報です)

Cabal-1.14.0
   GLUT-2.1.2.1
   HTTP-4000.2.5
   HUnit-1.2.5.1
   OpenGL-2.2.3.1
   QuickCheck-2.5.1.1
   array-0.4.0.0
   async-2.0.1.3
   base-4.5.1.0
   bin-package-db-0.0.0.0
   binary-0.5.1.0
   bytestring-0.9.2.1
   cgi-3001.1.7.4
   containers-0.4.2.1
   deepseq-1.3.0.0
   directory-1.1.0.2
   extensible-exceptions-0.1.1.4
   fgl-5.4.2.4
   filepath-1.3.0.0
   ghc-7.4.2
   ghc-prim-0.2.0.0
   haskell-platform-2012.4.0.0
   haskell-src-1.0.1.5
   haskell2010-1.1.0.1
   haskell98-2.0.0.1
   hoopl-3.8.7.3
   hpc-0.5.1.1
   html-1.0.1.2
   integer-gmp-0.4.0.0
   mtl-2.1.2
   network-2.3.1.0
   old-locale-1.0.0.4
   old-time-1.1.0.0
   parallel-3.2.0.3
   parsec-3.1.3
   pretty-1.1.1.0
   primitive-0.5.0.1
   process-1.1.0.1
   random-1.0.1.1
   regex-base-0.93.2
   regex-compat-0.95.1
   regex-posix-0.95.2
   rts-1.0
   split-0.2.1.1
   stm-2.4
   syb-0.3.7
   template-haskell-2.7.0.0
   text-0.11.2.3
   time-1.4
   transformers-0.3.0.0
   unix-2.5.1.1
   vector-0.10.0.1
   xhtml-3000.2.1
   zlib-0.5.4.0
/Users/james/.ghc/x86_64-darwin-7.4.2/package.conf.d
   Cabal-1.16.0.3
   GLURaw-1.3.0.0
   ObjectName-1.0.0.0
   OpenGL-2.6.0.1
   OpenGLRaw-1.3.0.0
   StateVar-1.0.0.0
   Tensor-1.0.0.1
   aeson-0.6.1.0
   ansi-terminal-0.6
   ansi-wl-pprint-0.6.6
   attoparsec-0.10.4.0
   blaze-builder-0.3.1.0
   blaze-html-0.5.1.3
   blaze-markup-0.5.1.4
   cairo-0.12.4
   cpphs-1.16
   data-default-0.5.0
   dlist-0.5
   fay-0.14.1.0
   fay-base-0.14.1.0
   ghc-paths-0.1.0.9
   gio-0.12.4
   glib-0.12.4
   gtk-0.12.4
   hashable-1.2.0.5
   haskeline-0.7.0.3
   haskell-lexer-1.0
   haskell-src-exts-1.13.5
   hostname-1.0
   language-ecmascript-0.10
   language-haskell-extract-0.2.4
   optparse-applicative-0.5.2.1
   pango-0.12.4
   pretty-show-1.5
   safe-0.3.3
   terminfo-0.3.2.5
   test-framework-0.8
   test-framework-hunit-0.3.0
   test-framework-th-0.2.4
   uniplate-1.6.10
   unordered-containers-0.2.3.0
   utf8-string-0.3.7
   xml-1.3.12
4

2 に答える 2

2

2つの問題がありました。エラーは、OpenGLがすでにインストールされているときにインストールしたことが原因だと思います。2つ目は、コードに「mainLoop」がないため、プログラムがすぐに停止することです。私はhaskellプラットフォームを再インストールすることになりました。

ありがとうございました

于 2013-03-08T04:10:34.350 に答える
2

これらのモジュールの両方をインポートしました

import Graphics.Rendering.OpenGL
import Graphics.UI.GLUT

それぞれが という名前の関数をエクスポートします($=)。どちらを使用したいかを把握し、おそらくそのうちの 1 つを非表示にする必要があります。

import Graphics.Rendering.OpenGL hiding (($=))

qualifiedまたは、これらのライブラリの一方または両方のインポートを使用します。

于 2013-03-08T03:30:06.067 に答える