1

モジュールがロードされた後、いくつかの新しいコンストラクターをデータ型に追加する必要があります。疑似コードは次のようになります。

import MyModule

data MyType = NewConstructor

上記の例MyTypeでは、 で以前に定義されていMyModuleます。それを行う方法はありますか?

4

1 に答える 1

4

できません。データ型が閉じられています。それ以外の場合は良いことですが、事前に定義された関数がどのように動作するかをどのように予測できますか?

いくつかの回避策が存在します。ここに私の頭の上にあるものをいくつか示します。

  1. 関数をコンストラクターとして使用します。例えばmyExtendedType = MyType 42;
  2. 独自の型とマッピング関数を使用します。例えばdata MyExtendedType = MyExtendedType; toMyType MyExtendedType = MyType 42;
  3. 既存のデータ型をラップします。

    import MyModule as Old
    
    data MyExtendedType = FromOld (MyType Int) | MyExtendedType
    
    foo (FromOld m) = Old.foo m
    foo MyExtendedType = undefined
    
于 2013-07-31T10:08:42.813 に答える