getter-setter.js 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. Types.Getter = template (
  2. 'function Getter (Key: Type, Val: Type) -> Interface',
  3. (KT, VT) => create_interface('Getter', [
  4. { name: 'get', f: { parameters: [
  5. { name: 'key', type: KT },
  6. { name: 'nf', type: Types.Bool }
  7. ], value_type: Types.Maybe.inflate(VT) }}
  8. ], null)
  9. )
  10. Types.Setter = template (
  11. 'function Setter (Key: Type, Val: Type) -> Interface',
  12. (KT, VT) => create_interface('Setter', [
  13. { name: 'set', f: { parameters: [
  14. { name: 'key', type: KT },
  15. { name: 'value', type: VT }
  16. ], value_type: Void } }
  17. ], null)
  18. )
  19. Types.GeneralGetter = Uni (
  20. Types.Hash,
  21. Types.List,
  22. Types.Struct,
  23. Types.Getter,
  24. Types.Enum,
  25. Types.Class,
  26. Types.Module,
  27. Types.Nil,
  28. Types.Error,
  29. Types.ES_Object,
  30. Types.ES_Class
  31. )
  32. Types.GeneralSetter = Uni (
  33. Types.Hash,
  34. Types.List,
  35. Types.Struct,
  36. Types.Setter,
  37. Types.Error,
  38. Types.ES_Object
  39. )
  40. Types.SliceIndexDefault = create_value('SliceIndexDefault')
  41. Types.SliceIndex = Uni(Types.Index, Types.SliceIndexDefault)
  42. Types.SliceGetter = create_interface('SliceGetter', [
  43. { name: 'slice', f: { parameters: [
  44. { name: 'low', type: Types.SliceIndex },
  45. { name: 'high', type: Types.SliceIndex }
  46. ], value_type: Types.Any } }
  47. ], null)