2011-02-04 78 views
1

Haskell SDL綁定導出名爲SDLKey的枚舉類型。枚舉實例聲明在一個奇怪的方式,雖然:Haskell: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,我怎樣才能調用它的枚舉函數?從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(..))接近文件的頂部)枚舉的一個實例。

它是Enum from Graphics.UI.SDL.Utilities一個實例,這需要的第二參數:

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