0

このチュートリアルに従おうとしていますが、プロジェクトをビルドしようとするとコンパイラがこのエラーを返します

No instance for (Fractional (GLdouble -> GLdouble))
  arising from a use of `keyboard'
Possible fix:
  add an instance declaration for (Fractional (GLdouble -> GLdouble))
In the first argument of `Just', namely `(keyboard pPos)'
In the second argument of `($=)', namely `Just (keyboard pPos)'
In a stmt of a 'do' block:
  keyboardMouseCallback $= Just (keyboard pPos)

ここにコードがあります

import Graphics.Rendering.OpenGL
import Graphics.UI.GLUT  as GLUT
import Squares
import OrbitingPointOfView
import ColorCube
import Data.IORef

main = do
    (progName,_) <-  getArgsAndInitialize
    initialDisplayMode $= [WithDepthBuffer,DoubleBuffered]
    createWindow progName
    depthFunc $= Just Less

    pPos <- newIORef (90::Int, 270::Int, 2)
    keyboardMouseCallback $= Just (keyboard pPos) -- <---  causes the problem

    displayCallback $= display pPos
    reshapeCallback $= Just reshape
    mainLoop

display pPos = do
    loadIdentity
    setPointOfView pPos
    clear [ColorBuffer,DepthBuffer]
    colorCube 1
    swapBuffers

keyboard pPos c _  _ _ = keyForPos pPos c

この問題を解決する方法を教えてください...

4

1 に答える 1

1

フォームのエラーメッセージが表示された場合

No instance for (... (... -> ...))

インスタンスのない型が関数型である場合 ( -> が示すように)、通常問題は、関数がどこかで間違った数の引数に適用されていることです。

ただし、@ user2407038が言ったように、貼り付けたもので定義されていない関数のタイプに依存するため、コードからそれがどこで発生するかは明確ではありません。おそらく、キーボードまたは keyForPos に別の数の引数を与える必要があります。

于 2013-11-08T03:08:05.800 に答える