モジュールがロードされた後、いくつかの新しいコンストラクターをデータ型に追加する必要があります。疑似コードは次のようになります。
import MyModule
data MyType = NewConstructor
上記の例MyType
では、 で以前に定義されていMyModule
ます。それを行う方法はありますか?
モジュールがロードされた後、いくつかの新しいコンストラクターをデータ型に追加する必要があります。疑似コードは次のようになります。
import MyModule
data MyType = NewConstructor
上記の例MyType
では、 で以前に定義されていMyModule
ます。それを行う方法はありますか?
できません。データ型が閉じられています。それ以外の場合は良いことですが、事前に定義された関数がどのように動作するかをどのように予測できますか?
いくつかの回避策が存在します。ここに私の頭の上にあるものをいくつか示します。
myExtendedType = MyType 42
;data MyExtendedType = MyExtendedType; toMyType MyExtendedType = MyType 42
;既存のデータ型をラップします。
import MyModule as Old
data MyExtendedType = FromOld (MyType Int) | MyExtendedType
foo (FromOld m) = Old.foo m
foo MyExtendedType = undefined