タグ

型推論に関するNagiseのブックマーク (2)

  • Hindley-Milner型推論アルゴリズムをGroovyで書いてみた - uehaj's blog

    こないだ「Haskellのforallについて理解したことを書いておく(ランクN多相限定)」の記事を書いたときにHindley-Milner型推論アルゴリズム*1を調査するにあたって、こちらにある「Scala by Example」の16章にあるScalaでの実装例をGroovyに書きなおしたので晒しておきます。 以下のような型検査・推論ができます。実行はできません。 def listLenTest = LetRec('len', Lam('xs', App(App(App(Var('if'), App(Var('isEmpty'), Var('xs'))), Var('zero')), App(Var('succ'), App(Var('len'), App(Var('tail'), Var('xs')))) )), App(Var('len'), App( App(Var('cons'

    Hindley-Milner型推論アルゴリズムをGroovyで書いてみた - uehaj's blog
  • Javaの型推論Utilsクラスのカラクリ

    Javaの型推論Utilsクラスというエントリで Listなどのジェネリクスの型パラメータを省略する方法が書かれています。 // 型推論で空のインスタンス作成。 // 変数の型と値の型、同じ物を2回書かなくてOK。 ArrayList<String> strs = list(); HashMap<String, Date> dateMap = map(); HashSet<File> files = set(); 気になるlist()の実装は public static <T> ArrayList<T> list(T... items) { return new ArrayList<T>(Arrays.asList(items)); } といった感じ。 通常は代入時にジェネリクスの警告が出る ジェネリクスの型パラメータを指定しない場合、代入の際に安全な代入ではないと警告されます。例えば L

  • 1