File: multiple_unifiers.sail

package info (click to toggle)
sail-ocaml 0.19.1%2Bdfsg5-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 18,008 kB
  • sloc: ml: 75,941; ansic: 8,848; python: 1,342; exp: 560; sh: 474; makefile: 218; cpp: 36
file content (16 lines) | stat: -rw-r--r-- 415 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
default Order dec
$include <prelude.sail>

// A simple example where two different but equivalent unifiers will be found
// for the parameter of f, and the type checker just needs to notice that they're
// equivalent and pick one.

struct Foo ('m, 'n) = {
  a: int('m),
  b: int('n),
}

val f : forall 'n. Foo('n,'n) -> int
function f(x) = x.a
val g : forall 'm 'n, 'm == 'n. Foo('m,'n) -> int
function g(x) = f(x)