2011-02-04 6 views
1

Haskell SDLバインディングは、SDLKeyという列挙型をエクスポートします。しかし、Enumインスタンスは、奇妙な方法で宣言されています。012L03C05A06.jpg SDLKeyは型パラメータを取りません。これは構文エラーではありません。 Haskellは、SDLKeyはEnumのインスタンスではないと報告しています。したがって、Enum関数はどのような型で定義されていますか?そして、最も重要なのは、SDLKeyが与えられているので、どのようにしてEnum関数を呼び出すことができますか?ここhackageからHaskell:SDLバインディングのBizzareインスタンス宣言

ソースコード: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のインスタンスであります

関連する問題