2011-02-04 7 views
1

하스켈 SDL 바인딩은 SDLKey라는 열거 형을 내 보냅니다. Enum 인스턴스는 이상한 방법으로 선언됩니다.하스켈 : SDL 바인딩의 Bizzare 인스턴스 선언

instance Enum SDLKey Word32 where 
    fromEnum SDLK_UNKNOWN = 0 
    fromEnum SDLK_FIRST = 0 
    fromEnum SDLK_BACKSPACE = 8 
    ... 

SDLKey는 구문 오류가 아닌데 어떻게 형식 매개 변수를 사용합니까? Haskell은 SDLKey가 Enum의 인스턴스가 아니라고보고하고 있으므로 어떤 유형의 Enum 함수가 정의 되었습니까? 그리고 가장 중요한 것은 주어진 SDLKey에 대해 어떻게 Enum 함수를 호출 할 수 있습니까? 여기 hackage에서

소스 코드 : http://hackage.haskell.org/packages/archive/SDL/0.6.2/doc/html/src/Graphics-UI-SDL-Keysym.html#SDLKey

답변

5

그것은 서곡 (파일의 상단에 import Prelude hiding (Enum(..)) 참조)에서 열거의 인스턴스가 아닙니다.

class Enum a b | a -> b where 
    succ :: a -> a 
    pred :: a -> a 
    toEnum :: b -> a 
    fromEnum :: a -> b 
    enumFromTo :: a -> a -> [a] 

는 루드에서 정의 비교 :

class Enum a where 
    succ    :: a -> a 
    pred    :: a -> a 
    toEnum    :: Int -> a 
    fromEnum   :: a -> Int 
    enumFrom   :: a -> [a] 
    enumFromThen  :: a -> a -> [a] 
    enumFromTo   :: a -> a -> [a] 
    enumFromThenTo  :: a -> a -> a -> [a] 
    -- comments and default definitions elided 

그것은 두 번째 매개 변수를 Enum from Graphics.UI.SDL.Utilities의 인스턴스이며