#Foreign.C.Types モジュールで CTime のデータ構成子がエクスポートされていないため、Integral クラスのインスタンスを定義できない問題ですが http://t.co/sglAgl0K #{-# LANGUAGE GeneralizedNewtypeDeriving, StandaloneDeriving #-}
import Data.Int
import Foreign.C.Types
deriving instance Integral CTime
#[1 of 1] Compiling Main ( C:\home\Test.hs, interpreted )
Test.hs:5:1:
Can't make a derived instance of `Integral CTime':
The data constructors of `CTime' are not all in scope
so you cannot derive an instance for it
In the stand-alone deriving instance for `Integral CTime'
Failed, modules loaded: none.
#HEAD では、GHCの「FFIでのnewtypeで宣言した型に対する扱い」が変更され、データ構成子をエクスポートしていない型を FFI で扱えなくなった [http://t.co/SIhjhfwr http://t.co/zrk2985M ] #のに伴い、CTime のデータ構成子がエクスポートされるようになっていますね。 http://t.co/Rgf3fYol #というわけで、GHC HEAD なら多分上記のソースコードで CTime 型の Integral クラスに対するインスタンスを定義できると思います。
##つまり、HEAD での変更後の扱いの方が Haskell 2010 の仕様に沿った振る舞いというわけですね。
#> 「FFI での newtype で宣言した型に対する扱い」