haskell-ja > Archives > 2011/10/26

2011/10/26 19:15:17 UTCshelarcy@twitter
#
Foreign.C.Types モジュールで CTime のデータ構成子がエクスポートされていないため、Integral クラスのインスタンスを定義できない問題ですが http://t.co/sglAgl0K
2011/10/26 19:15:53 UTCshelarcy
#
{-# 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.
2011/10/26 19:19:19 UTCshelarcy@twitter
#
HEAD では、GHCの「FFIでのnewtypeで宣言した型に対する扱い」が変更され、データ構成子をエクスポートしていない型を FFI で扱えなくなった [http://t.co/SIhjhfwr http://t.co/zrk2985M ]
#
のに伴い、CTime のデータ構成子がエクスポートされるようになっていますね。 http://t.co/Rgf3fYol
#
というわけで、GHC HEAD なら多分上記のソースコードで CTime 型の Integral クラスに対するインスタンスを定義できると思います。
2011/10/26 19:32:22 UTCshelarcy@twitter
#
なお、この変更は既に Haskell2010 の仕様の仕様に取り入れられています。 http://t.co/zxQzOkiA http://t.co/Ew2YRtS0 http://t.co/GAABpPAb
#
つまり、HEAD での変更後の扱いの方が Haskell 2010 の仕様に沿った振る舞いというわけですね。
#
> 「FFI での newtype で宣言した型に対する扱い」