/FingTest/TestCases.fs

http://github.com/sandersn/fing · F# · 461 lines · 436 code · 2 blank · 23 comment · 0 complexity · 07b7ca811b5df8157abed54de8620bf0 MD5 · raw file

  1. // Copyright (c) 2010, Nathan Sanders
  2. // Licence: New BSD. See accompanying documentation.
  3. module TestCases
  4. open Types
  5. let failures = [
  6. "'a<'a>" // I don't know if this is legal or not.
  7. "'a<'b>" // I .. uh .. think so?
  8. "list<'a<'b>>"
  9. "'a 'a" // same but with stupid suffix type
  10. // I'm pretty sure this should pass. It's probably related to the special cased parsing
  11. // of 'a :> 'b, which I think has problems detecting the right edge
  12. // ... maybe "and" isn't providing a strong enough right edge there.
  13. // anyway, the error occurs any time that 'a :> 'b isn't the last type var constraint
  14. "list<'a> when 'a : (read<'a,'b when 'a :> 'b and 'a : null> : 'a -> 'b)"
  15. ]
  16. // Later: I was thinking of Haskell's type system. F#'s is .NET's, which can't
  17. // do higher-kinded stuff. OH WELL, LIVING WITH MEDIOCRITY.
  18. let typedefpasses = ["<'a>"
  19. ; "<'a,'b>"
  20. ; "<'a,'b when 'a : null>"
  21. ; "<'a,'b when 'a : (new : unit -> 'T)>"
  22. ; "<'a,'b when 'a : struct>"
  23. ; "<'a,'b when 'a : not struct>"
  24. ; "<'a,'b when 'a : enum<int> >"
  25. ; "<'a,'b when 'a : enum<int Lazy> >"
  26. ; "<'a,'b when 'a : delegate<int,dword> >"
  27. ; "<'a,'b when 'a : (write : int->baz)>"
  28. ; "<'a,'b when 'a : (write : foo:int->bar:baz)>"
  29. ; "<'a,'b when 'a :> int>"
  30. ; "<'a,'b when 'a :> int Lazy>"
  31. ; "<'a,'b when 'a : null and 'b : null>"
  32. ; "<'a when 'a : null and 'a : null>"
  33. ; "<'a,'b when 'a :> 'b>"
  34. ; "<'a,'b when 'a : null and 'a :> 'b>"
  35. ; "<'a when 'a : null and 'a :> 'b>"]
  36. let memberpasses = ["read : stream->int->string"
  37. ; "read : stream->int list->string"
  38. ; "read : stream->int Lazy->string"
  39. ; "read : stream->list<int>->string"
  40. ; "read : stream->int[]->string"
  41. ; "read : stream->int[,,]->string"
  42. ; "read : stream->'a->string"
  43. ; "read : stream->'a when 'a : (read : int->string)->string"
  44. ; "read : string*stream->int"
  45. ; "read : ?foo:int->int"
  46. ; "read : ?foo:int->bar:int->int"
  47. ] @ [for t in typedefpasses -> "read"+t+" : 'a->'b"]
  48. let passes = ["int"
  49. ; "int->int"
  50. ; "int -> int-> \t int"
  51. ; "'a"
  52. ; "int*int"
  53. ; "int->int*int->int"
  54. ; "int*int->int*int"
  55. ; "'a->'a"
  56. ; "'a*'a"
  57. ; "_*^a"
  58. ; "(int)"
  59. ; "(int->int)"
  60. ; "('a->'a)"
  61. ; "('a*_)->(int->^a)"
  62. ; "(((int)))"
  63. ; "Microsoft.FSharp.Core.double"
  64. ; "Microsoft.FSharp.Core.list`1"
  65. ; "list"
  66. ; "list<>"
  67. ; "list<int>"
  68. ; "list<int->int>"
  69. ; "list<int*int>"
  70. ; "list<int*(int->int*int)>"
  71. ; "list<list<int>>"
  72. ; "list<_>"
  73. ; "list<_,_>"
  74. ; "list<int,'a,_>"
  75. ; "(int) Lazy"
  76. ; "(int->int) Lazy"
  77. ; "('a->'a) Lazy"
  78. ; "('a*_)->(int->^a) Lazy"
  79. ; "(('a*_)->(int->^a)) Lazy"
  80. ; "(((int))) Lazy"
  81. ; "Microsoft.FSharp.Core.double Lazy"
  82. ; "Microsoft.FSharp.Core.list`1 Lazy"
  83. ; "list Lazy"
  84. ; "list<'a> Lazy"
  85. ; "list Lazy Lazy"
  86. ; "int list"
  87. ; "int list Lazy"
  88. ; "int list list"
  89. ; "int list list Lazy"
  90. ; "int[]"
  91. ; "int[,]"
  92. ; "int[,,,,,,,]"
  93. ; "int[,] Lazy"
  94. ; "int[,,] Lazy"
  95. ; "list<'a> when 'a : null"
  96. ; "list<'a> when 'a : null Lazy"
  97. ; "list<'a> Lazy when 'a : null"
  98. ; "list<'a> when 'a : (new : unit -> 'T)"
  99. ; "list<'a> when 'a : struct"
  100. ; "list<'a> when 'a : not struct"
  101. ; "list<'a> when 'a : enum<int>"
  102. ; "list<'a> when 'a : delegate<int,'a>"
  103. ; "list<'a> when 'a :> Microsoft.Collections.IComparable"
  104. ; "list<'a,'b> when 'a :> 'b"
  105. ; "list<'a> when 'a : (read : string->int with get)"
  106. ; "list<'a> when 'a : (read : string->int with set)"
  107. ; "list<'a> when 'a : (read : string->int with get,set)"
  108. ; "list<'a> when 'a : (read : string->int with set,get)"
  109. ; "list<'a> when ('a or 'b) : (read : string->int->stream)"
  110. ; "list<'a> when 'a : (read<'b,'c> : 'a -> 'b -> 'c)"
  111. ] @ [for m in memberpasses -> "list<'a> when 'a : ("+m+")"
  112. ] @ ["set<'a> -> list<'a>"]
  113. let test () =
  114. Seq.map Parser.parse passes
  115. (*["'a";
  116. "(Microsoft.FSharp.Core.int)";
  117. "Microsoft.FSharp.Core.char";
  118. "Microsoft.FSharp.Core.string";
  119. "Microsoft.FSharp.Core.int * Microsoft.FSharp.Core.int";
  120. "Microsoft.FSharp.Core.int * Microsoft.FSharp.Core.int * Microsoft.FSharp.Core.int";
  121. "Microsoft.FSharp.Core.int * (Microsoft.FSharp.Core.int * Microsoft.FSharp.Core.int)";
  122. "(Microsoft.FSharp.Core.int * Microsoft.FSharp.Core.int) * Microsoft.FSharp.Core.int";
  123. // "Microsoft.FSharp.Collections.HashSet"
  124. // "System.Console"
  125. // "Microsoft.FSharp.Collections.list`1<Microsoft.FSharp.Core.int>"
  126. ] *)
  127. let passresults =
  128. [Id "int"
  129. ;Arrow [Id "int"; Id "int"]
  130. ;Arrow [Id "int"; Id "int"; Id "int"]
  131. ;Var (Normal "a")
  132. ;Tuple [Id "int"; Id "int"]
  133. ;Arrow [Id "int"; Tuple [Id "int"; Id "int"]; Id "int"]
  134. ;Arrow [Tuple [Id "int"; Id "int"]; Tuple [Id "int"; Id "int"]]
  135. ;Arrow [Var (Normal "a"); Var (Normal "a")]
  136. ;Tuple [Var (Normal "a"); Var (Normal "a")]
  137. ;Tuple [Var Anonymous; Var (Structural "a")]
  138. ;Id "int"
  139. ;Arrow [Id "int"; Id "int"]
  140. ;Arrow [Var (Normal "a"); Var (Normal "a")]
  141. ;Arrow
  142. [Tuple [Var (Normal "a"); Var Anonymous];
  143. Arrow [Id "int"; Var (Structural "a")]]
  144. ;Id "int"
  145. ;Id "Microsoft.FSharp.Core.double"
  146. ;Id "Microsoft.FSharp.Core.list`1"
  147. ;Id "list"
  148. ;Generic (Id "list",[])
  149. ;Generic (Id "list",[Id "int"])
  150. ;Generic (Id "list",[Arrow [Id "int"; Id "int"]])
  151. ;Generic (Id "list",[Tuple [Id "int"; Id "int"]])
  152. ;Generic
  153. (Id "list",[Tuple [Id "int"; Arrow [Id "int"; Tuple [Id "int"; Id "int"]]]])
  154. ;Generic (Id "list",[Generic (Id "list",[Id "int"])])
  155. ;Generic (Id "list",[Var Anonymous])
  156. ;Generic (Id "list",[Var Anonymous; Var Anonymous])
  157. ;Generic (Id "list",[Id "int"; Var (Normal "a"); Var Anonymous])
  158. ;Generic (Id "Lazy",[Id "int"])
  159. ;Generic (Id "Lazy",[Arrow [Id "int"; Id "int"]])
  160. ;Generic (Id "Lazy",[Arrow [Var (Normal "a"); Var (Normal "a")]])
  161. ;Arrow
  162. [Tuple [Var (Normal "a"); Var Anonymous];
  163. Generic (Id "Lazy",[Arrow [Id "int"; Var (Structural "a")]])]
  164. ;Generic
  165. (Id "Lazy",
  166. [Arrow
  167. [Tuple [Var (Normal "a"); Var Anonymous];
  168. Arrow [Id "int"; Var (Structural "a")]]])
  169. ;Generic (Id "Lazy",[Id "int"])
  170. ;Generic (Id "Lazy",[Id "Microsoft.FSharp.Core.double"])
  171. ;Generic (Id "Lazy",[Id "Microsoft.FSharp.Core.list`1"])
  172. ;Generic (Id "Lazy",[Id "list"])
  173. ;Generic (Id "Lazy",[Generic (Id "list",[Var (Normal "a")])])
  174. ;Generic (Id "Lazy",[Generic (Id "Lazy",[Id "list"])])
  175. ;Generic (Id "list",[Id "int"])
  176. ;Generic (Id "Lazy",[Generic (Id "list",[Id "int"])])
  177. ;Generic (Id "list",[Generic (Id "list",[Id "int"])])
  178. ;Generic (Id "Lazy",[Generic (Id "list",[Generic (Id "list",[Id "int"])])])
  179. ;Array (1,Id "int")
  180. ;Array (2,Id "int")
  181. ;Array (8,Id "int")
  182. ;Generic (Id "Lazy",[Array (2,Id "int")])
  183. ;Generic (Id "Lazy",[Array (3,Id "int")])
  184. ;Constraint (Null (Normal "a"),Generic (Id "list",[Var (Normal "a")]))
  185. ;Generic
  186. (Id "Lazy",
  187. [Constraint (Null (Normal "a"),Generic (Id "list",[Var (Normal "a")]))])
  188. ;Constraint
  189. (Null (Normal "a"),
  190. Generic (Id "Lazy",[Generic (Id "list",[Var (Normal "a")])]))
  191. ;Constraint
  192. (DefaultConstructor (Normal "a"),Generic (Id "list",[Var (Normal "a")]))
  193. ;Constraint (Struct (Normal "a"),Generic (Id "list",[Var (Normal "a")]))
  194. ;Constraint (NotStruct (Normal "a"),Generic (Id "list",[Var (Normal "a")]))
  195. ;Constraint (Enum (Normal "a",Id "int"),Generic (Id "list",[Var (Normal "a")]))
  196. ;Constraint
  197. (Delegate (Normal "a",Id "int",Var (Normal "a")),
  198. Generic (Id "list",[Var (Normal "a")]))
  199. ;Constraint
  200. (Subtype (Normal "a",Id "Microsoft.Collections.IComparable"),
  201. Generic (Id "list",[Var (Normal "a")]))
  202. ;Constraint
  203. (Subtype (Normal "a",Var (Normal "b")),
  204. Generic (Id "list",[Var (Normal "a"); Var (Normal "b")]))
  205. ;Constraint
  206. (Sig (Normal "a",Id "read",Arrow [Id "string"; Id "int"],Get),
  207. Generic (Id "list",[Var (Normal "a")]))
  208. ;Constraint
  209. (Sig (Normal "a",Id "read",Arrow [Id "string"; Id "int"],Set),
  210. Generic (Id "list",[Var (Normal "a")]))
  211. ;Constraint
  212. (Sig (Normal "a",Id "read",Arrow [Id "string"; Id "int"],GetSet),
  213. Generic (Id "list",[Var (Normal "a")]))
  214. ;Constraint
  215. (Sig (Normal "a",Id "read",Arrow [Id "string"; Id "int"],GetSet),
  216. Generic (Id "list",[Var (Normal "a")]))
  217. ;Constraint
  218. (Sig
  219. (Choice [Normal "a"; Normal "b"],Id "read",
  220. Arrow [Id "string"; Id "int"; Id "stream"],Function),
  221. Generic (Id "list",[Var (Normal "a")]))
  222. ;Constraint
  223. (Sig
  224. (Normal "a",Generic (Id "read",[Var (Normal "b"); Var (Normal "c")]),
  225. Arrow [Var (Normal "a"); Var (Normal "b"); Var (Normal "c")],Function),
  226. Generic (Id "list",[Var (Normal "a")]))
  227. ;Constraint
  228. (Sig
  229. (Normal "a",Id "read",Arrow [Id "stream"; Id "int"; Id "string"],Function),
  230. Generic (Id "list",[Var (Normal "a")]))
  231. ;Constraint
  232. (Sig
  233. (Normal "a",Id "read",
  234. Arrow [Id "stream"; Generic (Id "list",[Id "int"]); Id "string"],Function),
  235. Generic (Id "list",[Var (Normal "a")]))
  236. ;Constraint
  237. (Sig
  238. (Normal "a",Id "read",
  239. Arrow [Id "stream"; Generic (Id "Lazy",[Id "int"]); Id "string"],Function),
  240. Generic (Id "list",[Var (Normal "a")]))
  241. ;Constraint
  242. (Sig
  243. (Normal "a",Id "read",
  244. Arrow [Id "stream"; Generic (Id "list",[Id "int"]); Id "string"],Function),
  245. Generic (Id "list",[Var (Normal "a")]))
  246. ;Constraint
  247. (Sig
  248. (Normal "a",Id "read",Arrow [Id "stream"; Array (1,Id "int"); Id "string"],
  249. Function),Generic (Id "list",[Var (Normal "a")]))
  250. ;Constraint
  251. (Sig
  252. (Normal "a",Id "read",Arrow [Id "stream"; Array (3,Id "int"); Id "string"],
  253. Function),Generic (Id "list",[Var (Normal "a")]))
  254. ;Constraint
  255. (Sig
  256. (Normal "a",Id "read",Arrow [Id "stream"; Var (Normal "a"); Id "string"],
  257. Function),Generic (Id "list",[Var (Normal "a")]))
  258. ;Constraint
  259. (Sig
  260. (Normal "a",Id "read",
  261. Arrow
  262. [Id "stream";
  263. Constraint
  264. (Sig (Normal "a",Id "read",Arrow [Id "int"; Id "string"],Function),
  265. Var (Normal "a")); Id "string"],Function),
  266. Generic (Id "list",[Var (Normal "a")]))
  267. ;Constraint
  268. (Sig
  269. (Normal "a",Id "read",Arrow [Tuple [Id "string"; Id "stream"]; Id "int"],
  270. Function),Generic (Id "list",[Var (Normal "a")]))
  271. ;Constraint
  272. (Sig
  273. (Normal "a",Id "read",Arrow [NamedArg ("foo",Id "int",true); Id "int"],
  274. Function),Generic (Id "list",[Var (Normal "a")]))
  275. ;Constraint
  276. (Sig
  277. (Normal "a",Id "read",
  278. Arrow
  279. [NamedArg ("foo",Id "int",true); NamedArg ("bar",Id "int",false);
  280. Id "int"],Function),Generic (Id "list",[Var (Normal "a")]))
  281. ;Constraint
  282. (Sig
  283. (Normal "a",Generic (Id "read",[Var (Normal "a")]),
  284. Arrow [Var (Normal "a"); Var (Normal "b")],Function),
  285. Generic (Id "list",[Var (Normal "a")]))
  286. ;Constraint
  287. (Sig
  288. (Normal "a",Generic (Id "read",[Var (Normal "a"); Var (Normal "b")]),
  289. Arrow [Var (Normal "a"); Var (Normal "b")],Function),
  290. Generic (Id "list",[Var (Normal "a")]))
  291. ;Constraint
  292. (Sig
  293. (Normal "a",
  294. Constraint
  295. (TyparConstraint [Null (Normal "a")],
  296. Generic (Id "read",[Var (Normal "a"); Var (Normal "b")])),
  297. Arrow [Var (Normal "a"); Var (Normal "b")],Function),
  298. Generic (Id "list",[Var (Normal "a")]))
  299. ;Constraint
  300. (Sig
  301. (Normal "a",
  302. Constraint
  303. (TyparConstraint [DefaultConstructor (Normal "a")],
  304. Generic (Id "read",[Var (Normal "a"); Var (Normal "b")])),
  305. Arrow [Var (Normal "a"); Var (Normal "b")],Function),
  306. Generic (Id "list",[Var (Normal "a")]))
  307. ;Constraint
  308. (Sig
  309. (Normal "a",
  310. Constraint
  311. (TyparConstraint [Struct (Normal "a")],
  312. Generic (Id "read",[Var (Normal "a"); Var (Normal "b")])),
  313. Arrow [Var (Normal "a"); Var (Normal "b")],Function),
  314. Generic (Id "list",[Var (Normal "a")]))
  315. ;Constraint
  316. (Sig
  317. (Normal "a",
  318. Constraint
  319. (TyparConstraint [NotStruct (Normal "a")],
  320. Generic (Id "read",[Var (Normal "a"); Var (Normal "b")])),
  321. Arrow [Var (Normal "a"); Var (Normal "b")],Function),
  322. Generic (Id "list",[Var (Normal "a")]))
  323. ;Constraint
  324. (Sig
  325. (Normal "a",
  326. Constraint
  327. (TyparConstraint [Enum (Normal "a",Id "int")],
  328. Generic (Id "read",[Var (Normal "a"); Var (Normal "b")])),
  329. Arrow [Var (Normal "a"); Var (Normal "b")],Function),
  330. Generic (Id "list",[Var (Normal "a")]))
  331. ;Constraint
  332. (Sig
  333. (Normal "a",
  334. Constraint
  335. (TyparConstraint [Enum (Normal "a",Generic (Id "Lazy",[Id "int"]))],
  336. Generic (Id "read",[Var (Normal "a"); Var (Normal "b")])),
  337. Arrow [Var (Normal "a"); Var (Normal "b")],Function),
  338. Generic (Id "list",[Var (Normal "a")]))
  339. ;Constraint
  340. (Sig
  341. (Normal "a",
  342. Constraint
  343. (TyparConstraint [Delegate (Normal "a",Id "int",Id "dword")],
  344. Generic (Id "read",[Var (Normal "a"); Var (Normal "b")])),
  345. Arrow [Var (Normal "a"); Var (Normal "b")],Function),
  346. Generic (Id "list",[Var (Normal "a")]))
  347. ;Constraint
  348. (Sig
  349. (Normal "a",
  350. Constraint
  351. (TyparConstraint [Sig (Normal "a",Id "write",Arrow [Id "int"; Id "baz"],Function)],
  352. Generic (Id "read",[Var (Normal "a"); Var (Normal "b")])),
  353. Arrow [Var (Normal "a"); Var (Normal "b")],Function),
  354. Generic (Id "list",[Var (Normal "a")]))
  355. ;Constraint
  356. (Sig
  357. (Normal "a",
  358. Constraint
  359. (TyparConstraint
  360. [Sig (Normal "a",Id "write",
  361. Arrow
  362. [NamedArg ("foo",Id "int",false);
  363. NamedArg ("bar",Id "baz",false)],Function)],
  364. Generic (Id "read",[Var (Normal "a"); Var (Normal "b")])),
  365. Arrow [Var (Normal "a"); Var (Normal "b")],Function),
  366. Generic (Id "list",[Var (Normal "a")]))
  367. ;Constraint
  368. (Sig
  369. (Normal "a",
  370. Constraint
  371. (TyparConstraint [Subtype (Normal "a",Id "int")],
  372. Generic (Id "read",[Var (Normal "a"); Var (Normal "b")])),
  373. Arrow [Var (Normal "a"); Var (Normal "b")],Function),
  374. Generic (Id "list",[Var (Normal "a")]))
  375. ;Constraint
  376. (Sig
  377. (Normal "a",
  378. Constraint
  379. (TyparConstraint [Subtype (Normal "a",Generic (Id "Lazy",[Id "int"]))],
  380. Generic (Id "read",[Var (Normal "a"); Var (Normal "b")])),
  381. Arrow [Var (Normal "a"); Var (Normal "b")],Function),
  382. Generic (Id "list",[Var (Normal "a")]))
  383. ;Constraint
  384. (Sig
  385. (Normal "a",
  386. Constraint
  387. (TyparConstraint [Null (Normal "a"); Null (Normal "b")],
  388. Generic (Id "read",[Var (Normal "a"); Var (Normal "b")])),
  389. Arrow [Var (Normal "a"); Var (Normal "b")],Function),
  390. Generic (Id "list",[Var (Normal "a")]))
  391. ;Constraint
  392. (Sig
  393. (Normal "a",
  394. Constraint
  395. (TyparConstraint [Null (Normal "a"); Null (Normal "a")],
  396. Generic (Id "read",[Var (Normal "a")])),
  397. Arrow [Var (Normal "a"); Var (Normal "b")],Function),
  398. Generic (Id "list",[Var (Normal "a")]))
  399. ;Constraint
  400. (Sig
  401. (Normal "a",
  402. Constraint
  403. (TyparConstraint [Subtype (Normal "a",Var (Normal "b"))],
  404. Generic (Id "read",[Var (Normal "a"); Var (Normal "b")])),
  405. Arrow [Var (Normal "a"); Var (Normal "b")],Function),
  406. Generic (Id "list",[Var (Normal "a")]))
  407. ;Constraint
  408. (Sig
  409. (Normal "a",
  410. Constraint
  411. (TyparConstraint [Null (Normal "a"); Subtype (Normal "a",Var (Normal "b"))],
  412. Generic (Id "read",[Var (Normal "a"); Var (Normal "b")])),
  413. Arrow [Var (Normal "a"); Var (Normal "b")],Function),
  414. Generic (Id "list",[Var (Normal "a")]))
  415. ;Constraint
  416. (Sig
  417. (Normal "a",
  418. Constraint
  419. (TyparConstraint [Null (Normal "a"); Subtype (Normal "a",Var (Normal "b"))],
  420. Generic (Id "read",[Var (Normal "a")])),
  421. Arrow [Var (Normal "a"); Var (Normal "b")],Function),
  422. Generic (Id "list",[Var (Normal "a")]))
  423. ;Arrow [Generic (Id "set", [Var (Normal "a")]);
  424. Generic (Id "list", [Var (Normal "a")])]]
  425. let usedVarResults =
  426. let e = Set.empty
  427. let a = Set.singleton (Normal "a")
  428. let _a = Set.ofList [Anonymous;Normal "a"]
  429. let ab = Set.ofList [Normal "a";Normal "b"]
  430. let aab = Set.add (Choice (List.ofSeq ab)) a
  431. let abab = Set.add (Choice (List.ofSeq ab)) ab
  432. let _u = Set.singleton Anonymous
  433. [e;e;e; a; e;e;e;
  434. a;a; Set.add (Structural "a") _u; e;e; a;
  435. Set.add (Structural "a") _a; e; e; e; e; e; e; e; e; e; e
  436. _u; _u; _a; e; e; a; Set.add (Structural "a") _a; Set.add (Structural "a") _a;
  437. e; e; e; e; a; e;e;e;e;e;e;e;e;e;e;
  438. a;a;a;a;a;a;a;a;a;
  439. ab;a;a;a;a;aab; Set.add (Normal "c") ab
  440. // memberpasses
  441. a;a;a;a;a;a;a;a;a;a;a;
  442. // typedefpasses
  443. ab;ab;ab;ab;ab;ab;ab;ab;ab;ab;ab;ab;ab;ab;ab; ab;ab;ab;
  444. // new stuff
  445. a]
  446. let substs =
  447. [Var (Normal "a")
  448. ;Var (Structural "a")
  449. ;Var Anonymous
  450. ;Var (Choice [Normal "a"; Normal "b"; Structural "c"; Anonymous])
  451. ;Id "foo"
  452. ;NamedArg("foo", Id "string", false)
  453. ;Generic(Id "list",[Var (Normal "a")])
  454. ;Generic(Id "list",[Var (Normal "a");Var(Normal "b")])
  455. ;Array(8,Id "int")
  456. ;Array(8,Generic(Id "list",[Var (Normal "a")]))
  457. ;Constraint( Null (Normal "a"), Id "foo")
  458. ;Constraint( Null (Normal "a"), Generic(Id "list",[Var (Normal "a")]))
  459. ]