-1

型変数を含む型を考えると、型変数が繰り返されない型変数の無限のリストを定義する方法はありますか?

私の質問にもっと文脈を提供させてください。私はHaskellで自分の型推論に取り組んでいます。私のデータ型は次のようになります。

data Ty = TyUnit
        | TyVar String
        | TyBool
        | TyInt
        | TyBoolList
        | TyIntList
        | Arrow Ty Ty

上記のタイプの定義を示しました。この関数は、変数名の無限のリストを生成することになっていると思います。進め方と質問の実際の実装について混乱しています。

4

1 に答える 1

1

どうぞ。

allTys 0 = TyUnit : TyVar "?" : TyBool : TyInt : TyBoolList :  TyIntList : []
allTys n = [0..n-1] >>= (\i -> liftM2 Arrow (allTys i) (allTys (n-1-i))) 

allTypes = [0..] >>= allTys

allTys n高さnのタイプツリーを構築します。ここで、のArrow x y高さはxの高さ+ y + 1の高さであり、他のすべての高さは0です。構造は非常に基本的です。もっと速くできるかどうかはわかりません。さらに説明が必要な場合は、コメントで質問してください。

また、それが必要な場合、これはアルファベットのすべての文字列を取得する方法です(たとえば['a'..'z'])。

strings alphabet = (:) [] $ liftM2 (flip (:)) (strings alphabet) alphabet

長い文字列はsomechar:shortstring。です。空の文字列が含まれていることに注意してください。

于 2012-12-08T10:26:53.107 に答える