@effekt-lang/effekt 0.3.0 → 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (44) hide show
  1. package/README.md +6 -18
  2. package/bin/effekt +0 -0
  3. package/libraries/common/args.effekt +0 -27
  4. package/libraries/common/array.effekt +34 -63
  5. package/libraries/common/bench.effekt +40 -22
  6. package/libraries/common/buffer.effekt +8 -20
  7. package/libraries/common/bytes.effekt +5 -15
  8. package/libraries/common/dequeue.effekt +5 -5
  9. package/libraries/common/effekt.effekt +51 -92
  10. package/libraries/common/exception.effekt +0 -1
  11. package/libraries/common/io/console.effekt +30 -36
  12. package/libraries/common/io/error.effekt +131 -30
  13. package/libraries/common/io/filesystem.effekt +262 -0
  14. package/libraries/common/io/network.effekt +30 -54
  15. package/libraries/common/io/time.effekt +9 -12
  16. package/libraries/common/io.effekt +54 -124
  17. package/libraries/common/list.effekt +345 -327
  18. package/libraries/common/process.effekt +0 -1
  19. package/libraries/common/queue.effekt +1 -3
  20. package/libraries/common/ref.effekt +11 -24
  21. package/libraries/common/result.effekt +6 -14
  22. package/libraries/common/seq.effekt +28 -49
  23. package/libraries/common/string/tty.effekt +66 -0
  24. package/libraries/common/string.effekt +7 -49
  25. package/libraries/common/test.effekt +96 -34
  26. package/libraries/js/unsafe/cont.effekt +1 -1
  27. package/libraries/llvm/io.c +258 -378
  28. package/libraries/llvm/main.c +3 -0
  29. package/libraries/llvm/rts.ll +57 -38
  30. package/libraries/llvm/types.c +10 -1
  31. package/licenses/eclipse public license, version 2.0 - epl-2.0.html +4 -4
  32. package/licenses/mit license - mit-license.html +21 -20
  33. package/licenses/the bsd license - bsd-license.html +20 -21
  34. package/licenses/the mit license - mit.html +22 -21
  35. package/package.json +1 -1
  36. package/libraries/chez/lift/effekt.ss +0 -118
  37. package/libraries/common/io/files.effekt +0 -282
  38. package/libraries/js/io.js +0 -143
  39. package/libraries/llvm/io.ll +0 -19
  40. package/libraries/ml/effekt.sml +0 -65
  41. package/libraries/ml/internal/mllist.effekt +0 -9
  42. package/libraries/ml/internal/mloption.effekt +0 -18
  43. package/libraries/ml/random.effekt +0 -85
  44. package/libraries/ml/text/regex.effekt +0 -102
@@ -213,7 +213,7 @@ window._wpemojiSettings = {"baseUrl":"https:\/\/s.w.org\/images\/core\/emoji\/15
213
213
  padding: 0 !important;
214
214
  }
215
215
  </style>
216
- <link rel='stylesheet' id='wp-block-library-css' href='https://149753425.v2.pressablecdn.com/wp-content/plugins/gutenberg/build/block-library/style.css?ver=19.1.0' type='text/css' media='all' />
216
+ <link rel='stylesheet' id='wp-block-library-css' href='https://149753425.v2.pressablecdn.com/wp-content/plugins/gutenberg/build/block-library/style.css?ver=19.3.0' type='text/css' media='all' />
217
217
  <style id='osi-event-list-style-inline-css' type='text/css'>
218
218
  /*!***************************************************************************************************************************************************************************************************************************************!*\
219
219
  !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[3].use[1]!./node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[3].use[2]!./node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[3].use[3]!./src/style.scss ***!
@@ -243,15 +243,15 @@ window._wpemojiSettings = {"baseUrl":"https:\/\/s.w.org\/images\/core\/emoji\/15
243
243
  <link rel='stylesheet' id='coblocks-extensions-css' href='https://149753425.v2.pressablecdn.com/wp-content/plugins/coblocks/dist/style-coblocks-extensions.css?ver=3.1.13' type='text/css' media='all' />
244
244
  <link rel='stylesheet' id='coblocks-animation-css' href='https://149753425.v2.pressablecdn.com/wp-content/plugins/coblocks/dist/style-coblocks-animation.css?ver=2677611078ee87eb3b1c' type='text/css' media='all' />
245
245
  <link rel='stylesheet' id='contact-form-7-css' href='https://149753425.v2.pressablecdn.com/wp-content/plugins/contact-form-7/includes/css/styles.css?ver=5.9.8' type='text/css' media='all' />
246
- <link rel='stylesheet' id='events-manager-css' href='https://149753425.v2.pressablecdn.com/wp-content/plugins/events-manager/includes/css/events-manager.min.css?ver=6.5.2' type='text/css' media='all' />
247
- <link rel='stylesheet' id='events-manager-pro-css' href='https://149753425.v2.pressablecdn.com/wp-content/plugins/events-manager-pro/includes/css/events-manager-pro.css?ver=3.3.1' type='text/css' media='all' />
246
+ <link rel='stylesheet' id='events-manager-css' href='https://149753425.v2.pressablecdn.com/wp-content/plugins/events-manager/includes/css/events-manager.min.css?ver=6.6.1' type='text/css' media='all' />
247
+ <link rel='stylesheet' id='events-manager-pro-css' href='https://149753425.v2.pressablecdn.com/wp-content/plugins/events-manager-pro/includes/css/events-manager-pro.css?ver=3.4.1' type='text/css' media='all' />
248
248
  <style id='global-styles-inline-css' type='text/css'>
249
249
  :root{--wp--preset--aspect-ratio--square: 1;--wp--preset--aspect-ratio--4-3: 4/3;--wp--preset--aspect-ratio--3-4: 3/4;--wp--preset--aspect-ratio--3-2: 3/2;--wp--preset--aspect-ratio--2-3: 2/3;--wp--preset--aspect-ratio--16-9: 16/9;--wp--preset--aspect-ratio--9-16: 9/16;--wp--preset--color--black: #000000;--wp--preset--color--cyan-bluish-gray: #abb8c3;--wp--preset--color--white: #ffffff;--wp--preset--color--pale-pink: #f78da7;--wp--preset--color--vivid-red: #cf2e2e;--wp--preset--color--luminous-vivid-orange: #ff6900;--wp--preset--color--luminous-vivid-amber: #fcb900;--wp--preset--color--light-green-cyan: #7bdcb5;--wp--preset--color--vivid-green-cyan: #00d084;--wp--preset--color--pale-cyan-blue: #8ed1fc;--wp--preset--color--vivid-cyan-blue: #0693e3;--wp--preset--color--vivid-purple: #9b51e0;--wp--preset--color--brand-color-1: #3Ea638;--wp--preset--color--brand-color-2: #FB923c;--wp--preset--color--brand-color-3: #ebc342;--wp--preset--color--brand-color-4: #e66d4c;--wp--preset--color--brand-color-5: #1c531d;--wp--preset--color--brand-links: #23881f;--wp--preset--color--brand-alert: #a11c2e;--wp--preset--color--neutral-white: #ffffff;--wp--preset--color--neutral-lightest: #f2f3f2;--wp--preset--color--neutral-light: #d2d2d2;--wp--preset--color--neutral-mid: #949494;--wp--preset--color--neutral-dark: #414042;--wp--preset--color--neutral-darkest: #000000;--wp--preset--gradient--vivid-cyan-blue-to-vivid-purple: linear-gradient(135deg,rgba(6,147,227,1) 0%,rgb(155,81,224) 100%);--wp--preset--gradient--light-green-cyan-to-vivid-green-cyan: linear-gradient(135deg,rgb(122,220,180) 0%,rgb(0,208,130) 100%);--wp--preset--gradient--luminous-vivid-amber-to-luminous-vivid-orange: linear-gradient(135deg,rgba(252,185,0,1) 0%,rgba(255,105,0,1) 100%);--wp--preset--gradient--luminous-vivid-orange-to-vivid-red: linear-gradient(135deg,rgba(255,105,0,1) 0%,rgb(207,46,46) 100%);--wp--preset--gradient--very-light-gray-to-cyan-bluish-gray: linear-gradient(135deg,rgb(238,238,238) 0%,rgb(169,184,195) 100%);--wp--preset--gradient--cool-to-warm-spectrum: linear-gradient(135deg,rgb(74,234,220) 0%,rgb(151,120,209) 20%,rgb(207,42,186) 40%,rgb(238,44,130) 60%,rgb(251,105,98) 80%,rgb(254,248,76) 100%);--wp--preset--gradient--blush-light-purple: linear-gradient(135deg,rgb(255,206,236) 0%,rgb(152,150,240) 100%);--wp--preset--gradient--blush-bordeaux: linear-gradient(135deg,rgb(254,205,165) 0%,rgb(254,45,45) 50%,rgb(107,0,62) 100%);--wp--preset--gradient--luminous-dusk: linear-gradient(135deg,rgb(255,203,112) 0%,rgb(199,81,192) 50%,rgb(65,88,208) 100%);--wp--preset--gradient--pale-ocean: linear-gradient(135deg,rgb(255,245,203) 0%,rgb(182,227,212) 50%,rgb(51,167,181) 100%);--wp--preset--gradient--electric-grass: linear-gradient(135deg,rgb(202,248,128) 0%,rgb(113,206,126) 100%);--wp--preset--gradient--midnight: linear-gradient(135deg,rgb(2,3,129) 0%,rgb(40,116,252) 100%);--wp--preset--gradient--brand-color-1-gradient-darker: linear-gradient(135deg,#3Ea638 0%,#1f531c 100%);--wp--preset--gradient--brand-color-1-gradient-lighter: linear-gradient(135deg,#3Ea638 0%,#63ff59 100%);--wp--preset--gradient--brand-color-2-gradient-darker: linear-gradient(135deg,#FB923c 0%,#7d491e 100%);--wp--preset--gradient--brand-color-2-gradient-lighter: linear-gradient(135deg,#FB923c 0%,#ffe960 100%);--wp--preset--gradient--brand-color-3-gradient-darker: linear-gradient(135deg,#ebc342 0%,#756121 100%);--wp--preset--gradient--brand-color-3-gradient-lighter: linear-gradient(135deg,#ebc342 0%,#ffff69 100%);--wp--preset--gradient--brand-color-4-gradient-darker: linear-gradient(135deg,#e66d4c 0%,#733626 100%);--wp--preset--gradient--brand-color-4-gradient-lighter: linear-gradient(135deg,#e66d4c 0%,#ffae79 100%);--wp--preset--gradient--brand-color-5-gradient-darker: linear-gradient(135deg,#1c531d 0%,#0e290e 100%);--wp--preset--gradient--brand-color-5-gradient-lighter: linear-gradient(135deg,#1c531d 0%,#2c842e 100%);--wp--preset--gradient--brand-color-1-brand-color-2-gradient: linear-gradient(135deg,#3Ea638 0%,#FB923c 100%);--wp--preset--gradient--brand-color-1-brand-color-3-gradient: linear-gradient(135deg,#3Ea638 0%,#ebc342 100%);--wp--preset--gradient--brand-color-1-brand-color-4-gradient: linear-gradient(135deg,#3Ea638 0%,#e66d4c 100%);--wp--preset--gradient--brand-color-1-brand-color-5-gradient: linear-gradient(135deg,#3Ea638 0%,#1c531d 100%);--wp--preset--gradient--brand-color-2-brand-color-3-gradient: linear-gradient(135deg,#FB923c 0%,#ebc342 100%);--wp--preset--gradient--brand-color-2-brand-color-4-gradient: linear-gradient(135deg,#FB923c 0%,#e66d4c 100%);--wp--preset--gradient--brand-color-2-brand-color-5-gradient: linear-gradient(135deg,#FB923c 0%,#1c531d 100%);--wp--preset--gradient--brand-color-3-brand-color-4-gradient: linear-gradient(135deg,#ebc342 0%,#e66d4c 100%);--wp--preset--gradient--brand-color-3-brand-color-5-gradient: linear-gradient(135deg,#ebc342 0%,#1c531d 100%);--wp--preset--gradient--brand-color-4-brand-color-5-gradient: linear-gradient(135deg,#e66d4c 0%,#1c531d 100%);--wp--preset--font-size--small: clamp(14px, 0.875rem + ((1vw - 3.2px) * 0.156), 16px);--wp--preset--font-size--medium: clamp(22px, 1.375rem + ((1vw - 3.2px) * 0.156), 24px);--wp--preset--font-size--large: clamp(24px, 1.5rem + ((1vw - 3.2px) * 0.313), 28px);--wp--preset--font-size--x-large: clamp(28px, 1.75rem + ((1vw - 3.2px) * 1.563), 48px);--wp--preset--font-size--x-small: clamp(12px, 0.75rem + ((1vw - 3.2px) * 1), 12px);--wp--preset--font-size--normal: clamp(16px, 1rem + ((1vw - 3.2px) * 0.313), 20px);--wp--preset--font-size--xx-large: clamp(30px, 1.875rem + ((1vw - 3.2px) * 2.656), 64px);--wp--preset--font-family--system-font: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen-Sans, Ubuntu, Cantarell, 'Helvetica Neue', sans-serif;--wp--preset--font-family--libre-franklin: 'Libre Franklin', sans-serif;--wp--preset--font-family--space-mono: 'Space Mono', monospace;--wp--preset--spacing--20: 0.44rem;--wp--preset--spacing--30: 0.67rem;--wp--preset--spacing--40: 1rem;--wp--preset--spacing--50: 1.5rem;--wp--preset--spacing--60: 2.25rem;--wp--preset--spacing--70: 3.38rem;--wp--preset--spacing--80: 5.06rem;--wp--preset--shadow--natural: 6px 6px 9px rgba(0, 0, 0, 0.2);--wp--preset--shadow--deep: 12px 12px 50px rgba(0, 0, 0, 0.4);--wp--preset--shadow--sharp: 6px 6px 0px rgba(0, 0, 0, 0.2);--wp--preset--shadow--outlined: 6px 6px 0px -3px rgba(255, 255, 255, 1), 6px 6px rgba(0, 0, 0, 1);--wp--preset--shadow--crisp: 6px 6px 0px rgba(0, 0, 0, 1);--wp--custom--alignment--aligned-max-width: 50%;--wp--custom--animation--transition-duration: 0.3s;--wp--custom--animation--transition-type: all;--wp--custom--button--border--color: var(--wp--preset--color--brand-color-2);--wp--custom--button--border--color-secondary: var(--wp--preset--color--brand-color-1);--wp--custom--button--border--radius: 50px;--wp--custom--button--border--style: solid;--wp--custom--button--border--width: 2px;--wp--custom--button--color--background: var(--wp--preset--color--brand-color-2);--wp--custom--button--color--background-secondary: var(--wp--preset--color--brand-color-1);--wp--custom--button--color--text: var(--wp--preset--color--neutral-dark);--wp--custom--button--hover--color--text: var(--wp--custom--color--foreground);--wp--custom--button--hover--color--background: var(--wp--custom--color--background);--wp--custom--button--hover--border--color: var(--wp--custom--color--foreground);--wp--custom--button--spacing--padding--top: 0.7em;--wp--custom--button--spacing--padding--bottom: 0.7em;--wp--custom--button--spacing--padding--left: 1.75em;--wp--custom--button--spacing--padding--right: 1.75em;--wp--custom--button--typography--font-family: var(--wp--custom--typography--body--font-family);--wp--custom--button--typography--font-size: var(--wp--preset--font-size--normal);--wp--custom--button--typography--font-weight: 600;--wp--custom--button--typography--line-height: 1;--wp--custom--color--foreground: var(--wp--custom--typography--body--color);--wp--custom--color--background: var(--wp--preset--color--white);--wp--custom--color--primary: var(--wp--preset--color--brand-color-1);--wp--custom--color--secondary: var(--wp--preset--color--brand-color-2);--wp--custom--color--tertiary: var(--wp--preset--color--brand-color-3);--wp--custom--form--padding: 15px;--wp--custom--form--border--color: var(--wp--preset--color--neutral-dark);--wp--custom--form--border--radius: 0;--wp--custom--form--border--style: solid;--wp--custom--form--border--width: 1px;--wp--custom--form--checkbox--checked--content: "\2715";--wp--custom--form--checkbox--checked--font-size: var(--wp--preset--font-size--x-small);--wp--custom--form--checkbox--checked--position--left: 3px;--wp--custom--form--checkbox--checked--position--top: 3px;--wp--custom--form--checkbox--checked--sizing--height: 12px;--wp--custom--form--checkbox--checked--sizing--width: 12px;--wp--custom--form--checkbox--unchecked--content: "";--wp--custom--form--checkbox--unchecked--position--left: 0;--wp--custom--form--checkbox--unchecked--position--top: 0.2em;--wp--custom--form--checkbox--unchecked--sizing--height: 16px;--wp--custom--form--checkbox--unchecked--sizing--width: 16px;--wp--custom--form--color--active: var(--wp--preset--color--brand-alert);--wp--custom--form--color--background: var(--wp--preset--color--neutral-white);--wp--custom--form--color--box-shadow: none;--wp--custom--form--label--spacing--margin--bottom: var(--wp--custom--gap--baseline);--wp--custom--form--label--typography--color: var(--wp--preset--color--neutral-darkest);--wp--custom--form--label--typography--font-size: var(--wp--preset--font-size--small);--wp--custom--form--label--typography--font-family: var(--wp--custom--typography--subheading--font-family);--wp--custom--form--label--typography--font-weight: normal;--wp--custom--form--label--typography--letter-spacing: normal;--wp--custom--form--label--typography--text-transform: none;--wp--custom--form--typography--color: var(--wp--preset--color--neutral-darkest);--wp--custom--form--typography--font-size: var(--wp--preset--font-size--normal);--wp--custom--form--placeholder--color: var(--wp--preset--color--neutral-dark);--wp--custom--form--placeholder--font-size: var(--wp--preset--font-size--small);--wp--custom--form--placeholder--style: italic;--wp--custom--gallery--caption--font-size: var(--wp--preset--font-size--small);--wp--custom--typography--body--color: var(--wp--preset--color--neutral-darkest);--wp--custom--typography--body--font-family: var(--wp--preset--font-family--libre-franklin);--wp--custom--typography--body--font-weight: 400;--wp--custom--typography--body--font-weight-bold: 600;--wp--custom--typography--body--letter-space: 0;--wp--custom--typography--body--line-height: 1.6;--wp--custom--typography--body--margin: 20px;--wp--custom--typography--heading--color: var(--wp--preset--color--neutral-dark);--wp--custom--typography--heading--font-family: var(--wp--preset--font-family--libre-franklin);--wp--custom--typography--heading--font-weight: 600;--wp--custom--typography--heading--font-weight-bold: 800;--wp--custom--typography--heading--letter-space: 0;--wp--custom--typography--heading--line-height: 1.125;--wp--custom--typography--heading--margin: 20px;--wp--custom--typography--subheading--color: var(--wp--preset--color--neutral-darkest);--wp--custom--typography--subheading--font-family: var(--wp--preset--font-family--libre-franklin);--wp--custom--typography--subheading--font-weight: 600;--wp--custom--typography--subheading--font-weight-bold: 800;--wp--custom--typography--subheading--letter-space: 0;--wp--custom--typography--subheading--line-height: 1.125;--wp--custom--latest-posts--meta--color--text: var(--wp--custom--color--primary);--wp--custom--layout--content-size: 730px;--wp--custom--layout--wide-size: 1180px;--wp--custom--layout--narrow-size: 600px;--wp--custom--layout--post-size: 920px;--wp--custom--layout--sidebar-width-small: 80%;--wp--custom--layout--sidebar-width-mid: 60%;--wp--custom--gap--baseline: var(--wp--custom--spacing--small-padding);--wp--custom--gap--horizontal: min(var(--wp--custom--spacing--small-padding), 5vw);--wp--custom--gap--vertical: min(var(--wp--custom--spacing--small-padding), 5vw);--wp--custom--gap--horizontal-sm: var(--wp--custom--spacing--small-padding);--wp--custom--gap--horizontal-md: var(--wp--custom--spacing--mid-padding);--wp--custom--gap--horizontal-lg: var(--wp--custom--spacing--max-padding);--wp--custom--gap--vertical-sm: var(--wp--custom--spacing--small-padding);--wp--custom--navigation--submenu--border--color: transparent;--wp--custom--navigation--submenu--border--radius: var(--wp--custom--form--border--radius);--wp--custom--navigation--submenu--border--style: var(--wp--custom--form--border--style);--wp--custom--navigation--submenu--border--width: var(--wp--custom--form--border--width);--wp--custom--navigation--submenu--color--background: var(--wp--custom--color--primary);--wp--custom--navigation--submenu--color--text: var(--wp--custom--color--background);--wp--custom--page--title--font-size: var(--wp--preset--font-size--x-large);--wp--custom--page--title--margin: 1.5em;--wp--custom--paragraph--dropcap--margin: .1em .1em 0 0;--wp--custom--paragraph--dropcap--typography--font-size: 110px;--wp--custom--paragraph--dropcap--typography--font-weight: 400;--wp--custom--paragraph--link--typography--text-decoration: underline;--wp--custom--paragraph--link--hover--typography--text-decoration: none;--wp--custom--paragraph--link--focus--typography--text-decoration: none;--wp--custom--post-author--typography--font-weight: normal;--wp--custom--post-comment--typography--font-size: var(--wp--preset--font-size--normal);--wp--custom--post-comment--typography--line-height: var(--wp--custom--typography--body--line-height);--wp--custom--pullquote--citation--typography--font-size: var(--wp--preset--font-size--x-small);--wp--custom--pullquote--citation--typography--font-family: inherit;--wp--custom--pullquote--citation--typography--font-style: italic;--wp--custom--pullquote--citation--spacing--margin--top: var(--wp--custom--gap--vertical);--wp--custom--pullquote--typography--text-align: left;--wp--custom--pullquote--typography--font-size: var(--wp--preset--font-size--medium);--wp--custom--quote--citation--typography--font-size: var(--wp--preset--font-size--x-small);--wp--custom--quote--citation--typography--font-style: italic;--wp--custom--quote--citation--typography--font-weight: 400;--wp--custom--quote--typography--text-align: left;--wp--custom--quote--typography--font-size: var(--wp--preset--font-size--medium);--wp--custom--quote--typography--line-height: 1.4;--wp--custom--separator--opacity: 1;--wp--custom--separator--width: 150px;--wp--custom--spacing--small-padding: 16px;--wp--custom--spacing--mid-padding: 32px;--wp--custom--spacing--max-padding: 48px;--wp--custom--table--border--color: ;--wp--custom--table--border--width: 1px;--wp--custom--table--border--style: solid;--wp--custom--table--color--background: transparent;--wp--custom--table--header--border--color: ;--wp--custom--table--header--border--width: 2px;--wp--custom--table--header--color--background: red;--wp--custom--table--typography--font-size: var(--wp--preset--font-size--small);--wp--custom--table--typography--line-height: 1.4;--wp--custom--table--figcaption--typography--font-size: var(--wp--preset--font-size--x-small);--wp--custom--table--spacing--cell-padding: .25em;--wp--custom--video--caption--text-align: center;--wp--custom--video--caption--margin: var(--wp--custom--gap--vertical) auto;}:root { --wp--style--global--content-size: var(--wp--custom--layout--content-size);--wp--style--global--wide-size: var(--wp--custom--layout--wide-size); }:where(body) { margin: 0; }.wp-site-blocks > .alignleft { float: left; margin-right: 2em; }.wp-site-blocks > .alignright { float: right; margin-left: 2em; }.wp-site-blocks > .aligncenter { justify-content: center; margin-left: auto; margin-right: auto; }:where(.wp-site-blocks) > * { margin-block-start: 24px; margin-block-end: 0; }:where(.wp-site-blocks) > :first-child { margin-block-start: 0; }:where(.wp-site-blocks) > :last-child { margin-block-end: 0; }:root { --wp--style--block-gap: 24px; }:root :where(.is-layout-flow) > :first-child{margin-block-start: 0;}:root :where(.is-layout-flow) > :last-child{margin-block-end: 0;}:root :where(.is-layout-flow) > *{margin-block-start: 24px;margin-block-end: 0;}:root :where(.is-layout-constrained) > :first-child{margin-block-start: 0;}:root :where(.is-layout-constrained) > :last-child{margin-block-end: 0;}:root :where(.is-layout-constrained) > *{margin-block-start: 24px;margin-block-end: 0;}:root :where(.is-layout-flex){gap: 24px;}:root :where(.is-layout-grid){gap: 24px;}.is-layout-flow > .alignleft{float: left;margin-inline-start: 0;margin-inline-end: 2em;}.is-layout-flow > .alignright{float: right;margin-inline-start: 2em;margin-inline-end: 0;}.is-layout-flow > .aligncenter{margin-left: auto !important;margin-right: auto !important;}.is-layout-constrained > .alignleft{float: left;margin-inline-start: 0;margin-inline-end: 2em;}.is-layout-constrained > .alignright{float: right;margin-inline-start: 2em;margin-inline-end: 0;}.is-layout-constrained > .aligncenter{margin-left: auto !important;margin-right: auto !important;}.is-layout-constrained > :where(:not(.alignleft):not(.alignright):not(.alignfull)){max-width: var(--wp--style--global--content-size);margin-left: auto !important;margin-right: auto !important;}.is-layout-constrained > .alignwide{max-width: var(--wp--style--global--wide-size);}body .is-layout-flex{display: flex;}.is-layout-flex{flex-wrap: wrap;align-items: center;}.is-layout-flex > :is(*, div){margin: 0;}body .is-layout-grid{display: grid;}.is-layout-grid > :is(*, div){margin: 0;}body{padding-top: 0px;padding-right: 0px;padding-bottom: 0px;padding-left: 0px;}a:where(:not(.wp-element-button)){text-decoration: underline;}:root :where(.wp-element-button, .wp-block-button__link){background-color: #32373c;border-width: 0;color: #fff;font-family: inherit;font-size: inherit;line-height: inherit;padding-top: calc(0.667em + 2px);padding-right: calc(1.333em + 2px);padding-bottom: calc(0.667em + 2px);padding-left: calc(1.333em + 2px);text-decoration: none;}.has-black-color{color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-color{color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-color{color: var(--wp--preset--color--white) !important;}.has-pale-pink-color{color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-color{color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-color{color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-color{color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-color{color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-color{color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-color{color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-color{color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-color{color: var(--wp--preset--color--vivid-purple) !important;}.has-brand-color-1-color{color: var(--wp--preset--color--brand-color-1) !important;}.has-brand-color-2-color{color: var(--wp--preset--color--brand-color-2) !important;}.has-brand-color-3-color{color: var(--wp--preset--color--brand-color-3) !important;}.has-brand-color-4-color{color: var(--wp--preset--color--brand-color-4) !important;}.has-brand-color-5-color{color: var(--wp--preset--color--brand-color-5) !important;}.has-brand-links-color{color: var(--wp--preset--color--brand-links) !important;}.has-brand-alert-color{color: var(--wp--preset--color--brand-alert) !important;}.has-neutral-white-color{color: var(--wp--preset--color--neutral-white) !important;}.has-neutral-lightest-color{color: var(--wp--preset--color--neutral-lightest) !important;}.has-neutral-light-color{color: var(--wp--preset--color--neutral-light) !important;}.has-neutral-mid-color{color: var(--wp--preset--color--neutral-mid) !important;}.has-neutral-dark-color{color: var(--wp--preset--color--neutral-dark) !important;}.has-neutral-darkest-color{color: var(--wp--preset--color--neutral-darkest) !important;}.has-black-background-color{background-color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-background-color{background-color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-background-color{background-color: var(--wp--preset--color--white) !important;}.has-pale-pink-background-color{background-color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-background-color{background-color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-background-color{background-color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-background-color{background-color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-background-color{background-color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-background-color{background-color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-background-color{background-color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-background-color{background-color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-background-color{background-color: var(--wp--preset--color--vivid-purple) !important;}.has-brand-color-1-background-color{background-color: var(--wp--preset--color--brand-color-1) !important;}.has-brand-color-2-background-color{background-color: var(--wp--preset--color--brand-color-2) !important;}.has-brand-color-3-background-color{background-color: var(--wp--preset--color--brand-color-3) !important;}.has-brand-color-4-background-color{background-color: var(--wp--preset--color--brand-color-4) !important;}.has-brand-color-5-background-color{background-color: var(--wp--preset--color--brand-color-5) !important;}.has-brand-links-background-color{background-color: var(--wp--preset--color--brand-links) !important;}.has-brand-alert-background-color{background-color: var(--wp--preset--color--brand-alert) !important;}.has-neutral-white-background-color{background-color: var(--wp--preset--color--neutral-white) !important;}.has-neutral-lightest-background-color{background-color: var(--wp--preset--color--neutral-lightest) !important;}.has-neutral-light-background-color{background-color: var(--wp--preset--color--neutral-light) !important;}.has-neutral-mid-background-color{background-color: var(--wp--preset--color--neutral-mid) !important;}.has-neutral-dark-background-color{background-color: var(--wp--preset--color--neutral-dark) !important;}.has-neutral-darkest-background-color{background-color: var(--wp--preset--color--neutral-darkest) !important;}.has-black-border-color{border-color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-border-color{border-color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-border-color{border-color: var(--wp--preset--color--white) !important;}.has-pale-pink-border-color{border-color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-border-color{border-color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-border-color{border-color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-border-color{border-color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-border-color{border-color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-border-color{border-color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-border-color{border-color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-border-color{border-color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-border-color{border-color: var(--wp--preset--color--vivid-purple) !important;}.has-brand-color-1-border-color{border-color: var(--wp--preset--color--brand-color-1) !important;}.has-brand-color-2-border-color{border-color: var(--wp--preset--color--brand-color-2) !important;}.has-brand-color-3-border-color{border-color: var(--wp--preset--color--brand-color-3) !important;}.has-brand-color-4-border-color{border-color: var(--wp--preset--color--brand-color-4) !important;}.has-brand-color-5-border-color{border-color: var(--wp--preset--color--brand-color-5) !important;}.has-brand-links-border-color{border-color: var(--wp--preset--color--brand-links) !important;}.has-brand-alert-border-color{border-color: var(--wp--preset--color--brand-alert) !important;}.has-neutral-white-border-color{border-color: var(--wp--preset--color--neutral-white) !important;}.has-neutral-lightest-border-color{border-color: var(--wp--preset--color--neutral-lightest) !important;}.has-neutral-light-border-color{border-color: var(--wp--preset--color--neutral-light) !important;}.has-neutral-mid-border-color{border-color: var(--wp--preset--color--neutral-mid) !important;}.has-neutral-dark-border-color{border-color: var(--wp--preset--color--neutral-dark) !important;}.has-neutral-darkest-border-color{border-color: var(--wp--preset--color--neutral-darkest) !important;}.has-vivid-cyan-blue-to-vivid-purple-gradient-background{background: var(--wp--preset--gradient--vivid-cyan-blue-to-vivid-purple) !important;}.has-light-green-cyan-to-vivid-green-cyan-gradient-background{background: var(--wp--preset--gradient--light-green-cyan-to-vivid-green-cyan) !important;}.has-luminous-vivid-amber-to-luminous-vivid-orange-gradient-background{background: var(--wp--preset--gradient--luminous-vivid-amber-to-luminous-vivid-orange) !important;}.has-luminous-vivid-orange-to-vivid-red-gradient-background{background: var(--wp--preset--gradient--luminous-vivid-orange-to-vivid-red) !important;}.has-very-light-gray-to-cyan-bluish-gray-gradient-background{background: var(--wp--preset--gradient--very-light-gray-to-cyan-bluish-gray) !important;}.has-cool-to-warm-spectrum-gradient-background{background: var(--wp--preset--gradient--cool-to-warm-spectrum) !important;}.has-blush-light-purple-gradient-background{background: var(--wp--preset--gradient--blush-light-purple) !important;}.has-blush-bordeaux-gradient-background{background: var(--wp--preset--gradient--blush-bordeaux) !important;}.has-luminous-dusk-gradient-background{background: var(--wp--preset--gradient--luminous-dusk) !important;}.has-pale-ocean-gradient-background{background: var(--wp--preset--gradient--pale-ocean) !important;}.has-electric-grass-gradient-background{background: var(--wp--preset--gradient--electric-grass) !important;}.has-midnight-gradient-background{background: var(--wp--preset--gradient--midnight) !important;}.has-brand-color-1-gradient-darker-gradient-background{background: var(--wp--preset--gradient--brand-color-1-gradient-darker) !important;}.has-brand-color-1-gradient-lighter-gradient-background{background: var(--wp--preset--gradient--brand-color-1-gradient-lighter) !important;}.has-brand-color-2-gradient-darker-gradient-background{background: var(--wp--preset--gradient--brand-color-2-gradient-darker) !important;}.has-brand-color-2-gradient-lighter-gradient-background{background: var(--wp--preset--gradient--brand-color-2-gradient-lighter) !important;}.has-brand-color-3-gradient-darker-gradient-background{background: var(--wp--preset--gradient--brand-color-3-gradient-darker) !important;}.has-brand-color-3-gradient-lighter-gradient-background{background: var(--wp--preset--gradient--brand-color-3-gradient-lighter) !important;}.has-brand-color-4-gradient-darker-gradient-background{background: var(--wp--preset--gradient--brand-color-4-gradient-darker) !important;}.has-brand-color-4-gradient-lighter-gradient-background{background: var(--wp--preset--gradient--brand-color-4-gradient-lighter) !important;}.has-brand-color-5-gradient-darker-gradient-background{background: var(--wp--preset--gradient--brand-color-5-gradient-darker) !important;}.has-brand-color-5-gradient-lighter-gradient-background{background: var(--wp--preset--gradient--brand-color-5-gradient-lighter) !important;}.has-brand-color-1-brand-color-2-gradient-gradient-background{background: var(--wp--preset--gradient--brand-color-1-brand-color-2-gradient) !important;}.has-brand-color-1-brand-color-3-gradient-gradient-background{background: var(--wp--preset--gradient--brand-color-1-brand-color-3-gradient) !important;}.has-brand-color-1-brand-color-4-gradient-gradient-background{background: var(--wp--preset--gradient--brand-color-1-brand-color-4-gradient) !important;}.has-brand-color-1-brand-color-5-gradient-gradient-background{background: var(--wp--preset--gradient--brand-color-1-brand-color-5-gradient) !important;}.has-brand-color-2-brand-color-3-gradient-gradient-background{background: var(--wp--preset--gradient--brand-color-2-brand-color-3-gradient) !important;}.has-brand-color-2-brand-color-4-gradient-gradient-background{background: var(--wp--preset--gradient--brand-color-2-brand-color-4-gradient) !important;}.has-brand-color-2-brand-color-5-gradient-gradient-background{background: var(--wp--preset--gradient--brand-color-2-brand-color-5-gradient) !important;}.has-brand-color-3-brand-color-4-gradient-gradient-background{background: var(--wp--preset--gradient--brand-color-3-brand-color-4-gradient) !important;}.has-brand-color-3-brand-color-5-gradient-gradient-background{background: var(--wp--preset--gradient--brand-color-3-brand-color-5-gradient) !important;}.has-brand-color-4-brand-color-5-gradient-gradient-background{background: var(--wp--preset--gradient--brand-color-4-brand-color-5-gradient) !important;}.has-small-font-size{font-size: var(--wp--preset--font-size--small) !important;}.has-medium-font-size{font-size: var(--wp--preset--font-size--medium) !important;}.has-large-font-size{font-size: var(--wp--preset--font-size--large) !important;}.has-x-large-font-size{font-size: var(--wp--preset--font-size--x-large) !important;}.has-x-small-font-size{font-size: var(--wp--preset--font-size--x-small) !important;}.has-normal-font-size{font-size: var(--wp--preset--font-size--normal) !important;}.has-xx-large-font-size{font-size: var(--wp--preset--font-size--xx-large) !important;}.has-system-font-font-family{font-family: var(--wp--preset--font-family--system-font) !important;}.has-libre-franklin-font-family{font-family: var(--wp--preset--font-family--libre-franklin) !important;}.has-space-mono-font-family{font-family: var(--wp--preset--font-family--space-mono) !important;}
250
250
  :root :where(.wp-block-pullquote){font-size: clamp(0.984em, 0.984rem + ((1vw - 0.2em) * 0.645), 1.5em);line-height: 1.6;}
251
251
  </style>
252
252
  <link rel='stylesheet' id='cmplz-general-css' href='https://149753425.v2.pressablecdn.com/wp-content/plugins/complianz-gdpr/assets/css/cookieblocker.min.css?ver=1717180759' type='text/css' media='all' />
253
253
  <link rel='stylesheet' id='dashicons-css' href='https://c0.wp.com/c/6.6.2/wp-includes/css/dashicons.min.css' type='text/css' media='all' />
254
- <link rel='stylesheet' id='wp-components-css' href='https://149753425.v2.pressablecdn.com/wp-content/plugins/gutenberg/build/components/style.css?ver=19.1.0' type='text/css' media='all' />
254
+ <link rel='stylesheet' id='wp-components-css' href='https://149753425.v2.pressablecdn.com/wp-content/plugins/gutenberg/build/components/style.css?ver=19.3.0' type='text/css' media='all' />
255
255
  <link rel='stylesheet' id='godaddy-styles-css' href='https://149753425.v2.pressablecdn.com/wp-content/plugins/coblocks/includes/Dependencies/GoDaddy/Styles/build/latest.css?ver=2.0.2' type='text/css' media='all' />
256
256
  <link rel='stylesheet' id='indieweb-css' href='https://149753425.v2.pressablecdn.com/wp-content/plugins/indieweb/static/css/indieweb.css?ver=4.0.5' type='text/css' media='all' />
257
257
  <link rel='stylesheet' id='webmention-css' href='https://149753425.v2.pressablecdn.com/wp-content/plugins/webmention/assets/css/webmention.css?ver=5.3.3' type='text/css' media='all' />
@@ -265,10 +265,10 @@ window._wpemojiSettings = {"baseUrl":"https:\/\/s.w.org\/images\/core\/emoji\/15
265
265
 
266
266
  .wp-block-cover { background-image:url()}
267
267
  </style>
268
- <link rel='stylesheet' id='genericons-css' href='https://149753425.v2.pressablecdn.com/wp-content/plugins/jetpack/_inc/genericons/genericons/genericons.css?ver=3.1' type='text/css' media='all' />
268
+ <link rel='stylesheet' id='genericons-css' href='https://c0.wp.com/p/jetpack/13.9/_inc/genericons/genericons/genericons.css' type='text/css' media='all' />
269
+ <link rel='stylesheet' id='jetpack-social-menu-css' href='https://149753425.v2.pressablecdn.com/wp-content/plugins/jetpack/jetpack_vendor/automattic/jetpack-classic-theme-helper/src/social-menu/social-menu.css?ver=1.0' type='text/css' media='all' />
270
+ <link rel='stylesheet' id='jetpack-top-posts-widget-css' href='https://c0.wp.com/p/jetpack/13.9/modules/widgets/top-posts/style.css' type='text/css' media='all' />
269
271
  <link rel='stylesheet' id='syndication-style-css' href='https://149753425.v2.pressablecdn.com/wp-content/plugins/syndication-links/css/syn.min.css?ver=4.4.20' type='text/css' media='all' />
270
- <link rel='stylesheet' id='jetpack_css-css' href='https://149753425.v2.pressablecdn.com/wp-content/plugins/jetpack/css/jetpack.css?ver=13.9-a.3' type='text/css' media='all' />
271
- <script type="text/javascript" src="https://c0.wp.com/c/6.6.2/wp-includes/js/dist/vendor/wp-polyfill.min.js" id="wp-polyfill-js"></script>
272
272
  <script type="text/javascript" src="https://149753425.v2.pressablecdn.com/wp-content/plugins/gutenberg/build/hooks/index.min.js?ver=3aee234ea7807d8d70bc" id="wp-hooks-js"></script>
273
273
  <script type="text/javascript" src="https://149753425.v2.pressablecdn.com/wp-content/plugins/gutenberg/build/i18n/index.min.js?ver=5baa98e4345eccc97e24" id="wp-i18n-js"></script>
274
274
  <script type="text/javascript" id="wp-i18n-js-after">
@@ -295,11 +295,11 @@ jQuery(function(jQuery){jQuery.datepicker.setDefaults({"closeText":"Close","curr
295
295
  <script type="text/javascript" src="https://c0.wp.com/c/6.6.2/wp-includes/js/jquery/ui/dialog.min.js" id="jquery-ui-dialog-js"></script>
296
296
  <script type="text/javascript" id="events-manager-js-extra">
297
297
  /* <![CDATA[ */
298
- var EM = {"ajaxurl":"https:\/\/opensource.org\/wp-admin\/admin-ajax.php","locationajaxurl":"https:\/\/opensource.org\/wp-admin\/admin-ajax.php?action=locations_search","firstDay":"1","locale":"en","dateFormat":"yy-mm-dd","ui_css":"https:\/\/opensource.org\/wp-content\/plugins\/events-manager\/includes\/css\/jquery-ui\/build.min.css","show24hours":"0","is_ssl":"1","autocomplete_limit":"10","calendar":{"breakpoints":{"small":560,"medium":908,"large":false}},"phone":"","datepicker":{"format":"Y-m-d"},"search":{"breakpoints":{"small":650,"medium":850,"full":false}},"url":"https:\/\/opensource.org\/wp-content\/plugins\/events-manager","bookingInProgress":"Please wait while the booking is being submitted.","tickets_save":"Save Ticket","bookingajaxurl":"https:\/\/opensource.org\/wp-admin\/admin-ajax.php","bookings_export_save":"Export Bookings","bookings_settings_save":"Save Settings","booking_delete":"Are you sure you want to delete?","booking_offset":"30","bookings":{"submit_button":{"text":{"default":"Submit Booking","free":"Submit Booking","payment":"Submit Booking - %s","processing":"Processing ..."}},"update_listener":""},"bb_full":"Sold Out","bb_book":"Book Now","bb_booking":"Booking...","bb_booked":"Booking Submitted","bb_error":"Booking Error. Try again?","bb_cancel":"Cancel","bb_canceling":"Canceling...","bb_cancelled":"Cancelled","bb_cancel_error":"Cancellation Error. Try again?","txt_search":"Search","txt_searching":"Searching...","txt_loading":"Loading...","cache":"1","api_nonce":"311475fb2b","attendance_api_url":"https:\/\/opensource.org\/wp-json\/events-manager\/v1\/attendance"};
298
+ var EM = {"ajaxurl":"https:\/\/opensource.org\/wp-admin\/admin-ajax.php","locationajaxurl":"https:\/\/opensource.org\/wp-admin\/admin-ajax.php?action=locations_search","firstDay":"1","locale":"en","dateFormat":"yy-mm-dd","ui_css":"https:\/\/opensource.org\/wp-content\/plugins\/events-manager\/includes\/css\/jquery-ui\/build.min.css","show24hours":"0","is_ssl":"1","autocomplete_limit":"10","calendar":{"breakpoints":{"small":560,"medium":908,"large":false}},"phone":"","datepicker":{"format":"Y-m-d"},"search":{"breakpoints":{"small":650,"medium":850,"full":false}},"url":"https:\/\/opensource.org\/wp-content\/plugins\/events-manager","bookingInProgress":"Please wait while the booking is being submitted.","tickets_save":"Save Ticket","bookingajaxurl":"https:\/\/opensource.org\/wp-admin\/admin-ajax.php","bookings_export_save":"Export Bookings","bookings_settings_save":"Save Settings","booking_delete":"Are you sure you want to delete?","booking_offset":"30","bookings":{"submit_button":{"text":{"default":"Submit Booking","free":"Submit Booking","payment":"Submit Booking - %s","processing":"Processing ..."}},"update_listener":""},"bb_full":"Sold Out","bb_book":"Book Now","bb_booking":"Booking...","bb_booked":"Booking Submitted","bb_error":"Booking Error. Try again?","bb_cancel":"Cancel","bb_canceling":"Canceling...","bb_cancelled":"Cancelled","bb_cancel_error":"Cancellation Error. Try again?","txt_search":"Search","txt_searching":"Searching...","txt_loading":"Loading...","cache":"1","api_nonce":"9aff746ca8","attendance_api_url":"https:\/\/opensource.org\/wp-json\/events-manager\/v1\/attendance"};
299
299
  /* ]]> */
300
300
  </script>
301
- <script type="text/javascript" src="https://149753425.v2.pressablecdn.com/wp-content/plugins/events-manager/includes/js/events-manager.js?ver=6.5.2" id="events-manager-js"></script>
302
- <script type="text/javascript" src="https://149753425.v2.pressablecdn.com/wp-content/plugins/events-manager-pro/includes/js/events-manager-pro.js?ver=3.3.1" id="events-manager-pro-js"></script>
301
+ <script type="text/javascript" src="https://149753425.v2.pressablecdn.com/wp-content/plugins/events-manager/includes/js/events-manager.js?ver=6.6.1" id="events-manager-js"></script>
302
+ <script type="text/javascript" src="https://149753425.v2.pressablecdn.com/wp-content/plugins/events-manager-pro/includes/js/events-manager-pro.js?ver=3.4.1" id="events-manager-pro-js"></script>
303
303
  <script type="text/javascript" defer data-domain='opensource.org' data-api='https://opensource.org/wp-json/fcdf21/v1/da74/d08e74b0' data-cfasync='false' src="//opensource.org/wp-content/uploads/4931f7089c/801c1c58.js?ver=1707914173" id="plausible"></script>
304
304
  <script type="text/javascript" id="plausible-analytics-js-after">
305
305
  /* <![CDATA[ */
@@ -1200,31 +1200,32 @@ var wpcf7 = {"api":{"root":"https:\/\/opensource.org\/wp-json\/","namespace":"co
1200
1200
  wp.jpI18nLoader.state = {"baseUrl":"https://opensource.org/wp-content/languages/","locale":"en_US","domainMap":{"jetpack-admin-ui":"plugins/jetpack","jetpack-assets":"plugins/jetpack","jetpack-backup-pkg":"plugins/jetpack","jetpack-blaze":"plugins/jetpack","jetpack-boost-core":"plugins/jetpack","jetpack-boost-speed-score":"plugins/jetpack","jetpack-classic-theme-helper":"plugins/jetpack","jetpack-compat":"plugins/jetpack","jetpack-config":"plugins/jetpack","jetpack-connection":"plugins/jetpack","jetpack-explat":"plugins/jetpack","jetpack-forms":"plugins/jetpack","jetpack-image-cdn":"plugins/jetpack","jetpack-import":"plugins/jetpack","jetpack-ip":"plugins/jetpack","jetpack-jitm":"plugins/jetpack","jetpack-licensing":"plugins/jetpack","jetpack-masterbar":"plugins/jetpack","jetpack-my-jetpack":"plugins/jetpack","jetpack-password-checker":"plugins/jetpack","jetpack-plugins-installer":"plugins/jetpack","jetpack-post-list":"plugins/jetpack","jetpack-protect-models":"plugins/jetpack","jetpack-protect-status":"plugins/jetpack","jetpack-publicize-pkg":"plugins/jetpack","jetpack-search-pkg":"plugins/jetpack","jetpack-stats":"plugins/jetpack","jetpack-stats-admin":"plugins/jetpack","jetpack-sync":"plugins/jetpack","jetpack-videopress-pkg":"plugins/jetpack","jetpack-waf":"plugins/jetpack","jetpack-wordads":"plugins/jetpack","woocommerce-analytics":"plugins/jetpack"},"domainPaths":{"jetpack-admin-ui":"jetpack_vendor/automattic/jetpack-admin-ui/","jetpack-assets":"jetpack_vendor/automattic/jetpack-assets/","jetpack-backup-pkg":"jetpack_vendor/automattic/jetpack-backup/","jetpack-blaze":"jetpack_vendor/automattic/jetpack-blaze/","jetpack-boost-core":"jetpack_vendor/automattic/jetpack-boost-core/","jetpack-boost-speed-score":"jetpack_vendor/automattic/jetpack-boost-speed-score/","jetpack-classic-theme-helper":"jetpack_vendor/automattic/jetpack-classic-theme-helper/","jetpack-compat":"jetpack_vendor/automattic/jetpack-compat/","jetpack-config":"jetpack_vendor/automattic/jetpack-config/","jetpack-connection":"jetpack_vendor/automattic/jetpack-connection/","jetpack-explat":"jetpack_vendor/automattic/jetpack-explat/","jetpack-forms":"jetpack_vendor/automattic/jetpack-forms/","jetpack-image-cdn":"jetpack_vendor/automattic/jetpack-image-cdn/","jetpack-import":"jetpack_vendor/automattic/jetpack-import/","jetpack-ip":"jetpack_vendor/automattic/jetpack-ip/","jetpack-jitm":"jetpack_vendor/automattic/jetpack-jitm/","jetpack-licensing":"jetpack_vendor/automattic/jetpack-licensing/","jetpack-masterbar":"jetpack_vendor/automattic/jetpack-masterbar/","jetpack-my-jetpack":"jetpack_vendor/automattic/jetpack-my-jetpack/","jetpack-password-checker":"jetpack_vendor/automattic/jetpack-password-checker/","jetpack-plugins-installer":"jetpack_vendor/automattic/jetpack-plugins-installer/","jetpack-post-list":"jetpack_vendor/automattic/jetpack-post-list/","jetpack-protect-models":"jetpack_vendor/automattic/jetpack-protect-models/","jetpack-protect-status":"jetpack_vendor/automattic/jetpack-protect-status/","jetpack-publicize-pkg":"jetpack_vendor/automattic/jetpack-publicize/","jetpack-search-pkg":"jetpack_vendor/automattic/jetpack-search/","jetpack-stats":"jetpack_vendor/automattic/jetpack-stats/","jetpack-stats-admin":"jetpack_vendor/automattic/jetpack-stats-admin/","jetpack-sync":"jetpack_vendor/automattic/jetpack-sync/","jetpack-videopress-pkg":"jetpack_vendor/automattic/jetpack-videopress/","jetpack-waf":"jetpack_vendor/automattic/jetpack-waf/","jetpack-wordads":"jetpack_vendor/automattic/jetpack-wordads/","woocommerce-analytics":"jetpack_vendor/automattic/woocommerce-analytics/"}};
1201
1201
  /* ]]> */
1202
1202
  </script>
1203
- <script type="text/javascript" src="https://149753425.v2.pressablecdn.com/wp-content/plugins/gutenberg/build/url/index.min.js?ver=a6fb0cfbb9a37fe64b17" id="wp-url-js"></script>
1203
+ <script type="text/javascript" src="https://c0.wp.com/c/6.6.2/wp-includes/js/dist/vendor/wp-polyfill.min.js" id="wp-polyfill-js"></script>
1204
+ <script type="text/javascript" src="https://149753425.v2.pressablecdn.com/wp-content/plugins/gutenberg/build/url/index.min.js?ver=e74ad4bf74882e4e920c" id="wp-url-js"></script>
1204
1205
  <script type="text/javascript" id="jetpack-instant-search-js-before">
1205
1206
  /* <![CDATA[ */
1206
- var JetpackInstantSearchOptions=JSON.parse(decodeURIComponent("%7B%22overlayOptions%22%3A%7B%22colorTheme%22%3A%22light%22%2C%22enableInfScroll%22%3Atrue%2C%22enableFilteringOpensOverlay%22%3Atrue%2C%22enablePostDate%22%3Atrue%2C%22enableSort%22%3Atrue%2C%22highlightColor%22%3A%22%23fdd7b9%22%2C%22overlayTrigger%22%3A%22submit%22%2C%22resultFormat%22%3A%22expanded%22%2C%22showPoweredBy%22%3Atrue%2C%22defaultSort%22%3A%22relevance%22%2C%22excludedPostTypes%22%3A%5B%22attachment%22%5D%7D%2C%22homeUrl%22%3A%22https%3A%5C%2F%5C%2Fopensource.org%22%2C%22locale%22%3A%22en-US%22%2C%22postsPerPage%22%3A12%2C%22siteId%22%3A210318891%2C%22postTypes%22%3A%7B%22post%22%3A%7B%22singular_name%22%3A%22Post%22%2C%22name%22%3A%22Posts%22%7D%2C%22page%22%3A%7B%22singular_name%22%3A%22Page%22%2C%22name%22%3A%22Pages%22%7D%2C%22attachment%22%3A%7B%22singular_name%22%3A%22Media%22%2C%22name%22%3A%22Media%22%7D%2C%22board-member%22%3A%7B%22singular_name%22%3A%22Board%20Member%22%2C%22name%22%3A%22Board%20Members%22%7D%2C%22license%22%3A%7B%22singular_name%22%3A%22License%22%2C%22name%22%3A%22Licenses%22%7D%2C%22meeting-minutes%22%3A%7B%22singular_name%22%3A%22Meeting%20Minutes%22%2C%22name%22%3A%22Meeting%20Minutes%22%7D%2C%22press-mentions%22%3A%7B%22singular_name%22%3A%22Press%20mentions%22%2C%22name%22%3A%22Press%20mentions%22%7D%7D%2C%22webpackPublicPath%22%3A%22https%3A%5C%2F%5C%2Fopensource.org%5C%2Fwp-content%5C%2Fplugins%5C%2Fjetpack%5C%2Fjetpack_vendor%5C%2Fautomattic%5C%2Fjetpack-search%5C%2Fbuild%5C%2Finstant-search%5C%2F%22%2C%22isPhotonEnabled%22%3Atrue%2C%22isFreePlan%22%3Afalse%2C%22apiRoot%22%3A%22https%3A%5C%2F%5C%2Fopensource.org%5C%2Fwp-json%5C%2F%22%2C%22apiNonce%22%3A%22311475fb2b%22%2C%22isPrivateSite%22%3Afalse%2C%22isWpcom%22%3Afalse%2C%22hasOverlayWidgets%22%3Atrue%2C%22widgets%22%3A%5B%7B%22filters%22%3A%5B%7B%22name%22%3A%22Post%20Types%22%2C%22type%22%3A%22post_type%22%2C%22count%22%3A6%2C%22widget_id%22%3A%22jetpack-search-filters-4%22%2C%22filter_id%22%3A%22post_type_0%22%7D%2C%7B%22name%22%3A%22Categories%22%2C%22type%22%3A%22taxonomy%22%2C%22taxonomy%22%3A%22category%22%2C%22count%22%3A5%2C%22widget_id%22%3A%22jetpack-search-filters-4%22%2C%22filter_id%22%3A%22taxonomy_1%22%7D%2C%7B%22name%22%3A%22Tags%22%2C%22type%22%3A%22taxonomy%22%2C%22taxonomy%22%3A%22post_tag%22%2C%22count%22%3A5%2C%22widget_id%22%3A%22jetpack-search-filters-4%22%2C%22filter_id%22%3A%22taxonomy_2%22%7D%2C%7B%22name%22%3A%22Year%22%2C%22type%22%3A%22date_histogram%22%2C%22count%22%3A5%2C%22field%22%3A%22post_date%22%2C%22interval%22%3A%22year%22%2C%22widget_id%22%3A%22jetpack-search-filters-4%22%2C%22filter_id%22%3A%22date_histogram_3%22%7D%5D%2C%22widget_id%22%3A%22jetpack-search-filters-4%22%7D%5D%2C%22widgetsOutsideOverlay%22%3A%5B%5D%2C%22hasNonSearchWidgets%22%3Afalse%2C%22preventTrackingCookiesReset%22%3Afalse%7D"));
1207
+ var JetpackInstantSearchOptions=JSON.parse(decodeURIComponent("%7B%22overlayOptions%22%3A%7B%22colorTheme%22%3A%22light%22%2C%22enableInfScroll%22%3Atrue%2C%22enableFilteringOpensOverlay%22%3Atrue%2C%22enablePostDate%22%3Atrue%2C%22enableSort%22%3Atrue%2C%22highlightColor%22%3A%22%23fdd7b9%22%2C%22overlayTrigger%22%3A%22submit%22%2C%22resultFormat%22%3A%22expanded%22%2C%22showPoweredBy%22%3Atrue%2C%22defaultSort%22%3A%22relevance%22%2C%22excludedPostTypes%22%3A%5B%22attachment%22%5D%7D%2C%22homeUrl%22%3A%22https%3A%5C%2F%5C%2Fopensource.org%22%2C%22locale%22%3A%22en-US%22%2C%22postsPerPage%22%3A12%2C%22siteId%22%3A210318891%2C%22postTypes%22%3A%7B%22post%22%3A%7B%22singular_name%22%3A%22Post%22%2C%22name%22%3A%22Posts%22%7D%2C%22page%22%3A%7B%22singular_name%22%3A%22Page%22%2C%22name%22%3A%22Pages%22%7D%2C%22attachment%22%3A%7B%22singular_name%22%3A%22Media%22%2C%22name%22%3A%22Media%22%7D%2C%22board-member%22%3A%7B%22singular_name%22%3A%22Board%20Member%22%2C%22name%22%3A%22Board%20Members%22%7D%2C%22license%22%3A%7B%22singular_name%22%3A%22License%22%2C%22name%22%3A%22Licenses%22%7D%2C%22meeting-minutes%22%3A%7B%22singular_name%22%3A%22Meeting%20Minutes%22%2C%22name%22%3A%22Meeting%20Minutes%22%7D%2C%22press-mentions%22%3A%7B%22singular_name%22%3A%22Press%20mentions%22%2C%22name%22%3A%22Press%20mentions%22%7D%7D%2C%22webpackPublicPath%22%3A%22https%3A%5C%2F%5C%2Fopensource.org%5C%2Fwp-content%5C%2Fplugins%5C%2Fjetpack%5C%2Fjetpack_vendor%5C%2Fautomattic%5C%2Fjetpack-search%5C%2Fbuild%5C%2Finstant-search%5C%2F%22%2C%22isPhotonEnabled%22%3Atrue%2C%22isFreePlan%22%3Afalse%2C%22apiRoot%22%3A%22https%3A%5C%2F%5C%2Fopensource.org%5C%2Fwp-json%5C%2F%22%2C%22apiNonce%22%3A%229aff746ca8%22%2C%22isPrivateSite%22%3Afalse%2C%22isWpcom%22%3Afalse%2C%22hasOverlayWidgets%22%3Atrue%2C%22widgets%22%3A%5B%7B%22filters%22%3A%5B%7B%22name%22%3A%22Post%20Types%22%2C%22type%22%3A%22post_type%22%2C%22count%22%3A6%2C%22widget_id%22%3A%22jetpack-search-filters-4%22%2C%22filter_id%22%3A%22post_type_0%22%7D%2C%7B%22name%22%3A%22Categories%22%2C%22type%22%3A%22taxonomy%22%2C%22taxonomy%22%3A%22category%22%2C%22count%22%3A5%2C%22widget_id%22%3A%22jetpack-search-filters-4%22%2C%22filter_id%22%3A%22taxonomy_1%22%7D%2C%7B%22name%22%3A%22Tags%22%2C%22type%22%3A%22taxonomy%22%2C%22taxonomy%22%3A%22post_tag%22%2C%22count%22%3A5%2C%22widget_id%22%3A%22jetpack-search-filters-4%22%2C%22filter_id%22%3A%22taxonomy_2%22%7D%2C%7B%22name%22%3A%22Year%22%2C%22type%22%3A%22date_histogram%22%2C%22count%22%3A5%2C%22field%22%3A%22post_date%22%2C%22interval%22%3A%22year%22%2C%22widget_id%22%3A%22jetpack-search-filters-4%22%2C%22filter_id%22%3A%22date_histogram_3%22%7D%5D%2C%22widget_id%22%3A%22jetpack-search-filters-4%22%7D%5D%2C%22widgetsOutsideOverlay%22%3A%5B%5D%2C%22hasNonSearchWidgets%22%3Afalse%2C%22preventTrackingCookiesReset%22%3Afalse%7D"));
1207
1208
  /* ]]> */
1208
1209
  </script>
1209
- <script type="text/javascript" src="https://149753425.v2.pressablecdn.com/wp-content/plugins/jetpack/jetpack_vendor/automattic/jetpack-search/build/instant-search/jp-search.js?minify=false&amp;ver=69b2279d3ec19323cba4" id="jetpack-instant-search-js"></script>
1210
- <script data-service="jetpack-statistics" data-category="statistics" type="text/plain" data-cmplz-src="//stats.wp.com/w.js?ver=202438" id="jp-tracks-js"></script>
1210
+ <script type="text/javascript" src="https://149753425.v2.pressablecdn.com/wp-content/plugins/jetpack/jetpack_vendor/automattic/jetpack-search/build/instant-search/jp-search.js?minify=false&amp;ver=ad35b3c0c4998c47e4fc" id="jetpack-instant-search-js"></script>
1211
+ <script data-service="jetpack-statistics" data-category="statistics" type="text/plain" data-cmplz-src="//stats.wp.com/w.js?ver=202441" id="jp-tracks-js"></script>
1211
1212
  <script type="text/javascript" id="osi-theme-scripts-js-before">
1212
1213
  /* <![CDATA[ */
1213
1214
  const OSI_LICENSE_DB = {"ajaxURL":"https:\/\/opensource.org\/wp-admin\/admin-ajax.php","action":"osi_license_db"}
1214
1215
  /* ]]> */
1215
1216
  </script>
1216
1217
  <script type="text/javascript" src="https://149753425.v2.pressablecdn.com/wp-content/themes/osi/assets/js/build/theme.js?ver=1724798073" id="osi-theme-scripts-js"></script>
1217
- <script data-service="jetpack-statistics" data-category="statistics" type="text/plain" data-cmplz-src="https://stats.wp.com/e-202438.js" id="jetpack-stats-js" data-wp-strategy="defer"></script>
1218
+ <script data-service="jetpack-statistics" data-category="statistics" type="text/plain" data-cmplz-src="https://stats.wp.com/e-202441.js" id="jetpack-stats-js" data-wp-strategy="defer"></script>
1218
1219
  <script type="text/javascript" id="jetpack-stats-js-after">
1219
1220
  /* <![CDATA[ */
1220
1221
  _stq = window._stq || [];
1221
- _stq.push([ "view", JSON.parse("{\"v\":\"ext\",\"blog\":\"210318891\",\"post\":\"395\",\"tz\":\"0\",\"srv\":\"opensource.org\",\"hp\":\"atomic\",\"ac\":\"3\",\"amp\":\"0\",\"j\":\"1:13.9-a.3\"}") ]);
1222
+ _stq.push([ "view", JSON.parse("{\"v\":\"ext\",\"blog\":\"210318891\",\"post\":\"395\",\"tz\":\"0\",\"srv\":\"opensource.org\",\"hp\":\"atomic\",\"ac\":\"3\",\"amp\":\"0\",\"j\":\"1:13.9\"}") ]);
1222
1223
  _stq.push([ "clickTrackerInit", "210318891", "395" ]);
1223
1224
  /* ]]> */
1224
1225
  </script>
1225
1226
  <script type="text/javascript" id="cmplz-cookiebanner-js-extra">
1226
1227
  /* <![CDATA[ */
1227
- var complianz = {"prefix":"cmplz_","user_banner_id":"1","set_cookies":[],"block_ajax_content":"","banner_version":"43","version":"7.1.0","store_consent":"","do_not_track_enabled":"1","consenttype":"optin","region":"eu","geoip":"","dismiss_timeout":"","disable_cookiebanner":"1","soft_cookiewall":"","dismiss_on_scroll":"","cookie_expiry":"365","url":"https:\/\/opensource.org\/wp-json\/complianz\/v1\/","locale":"lang=en&locale=en_US","set_cookies_on_root":"","cookie_domain":"","current_policy_id":"16","cookie_path":"\/","categories":{"statistics":"statistics","marketing":"marketing"},"tcf_active":"","placeholdertext":"Click to accept {category} cookies and enable this content","css_file":"https:\/\/opensource.org\/wp-content\/uploads\/complianz\/css\/banner-{banner_id}-{type}.css?v=43","page_links":{"eu":{"cookie-statement":{"title":"","url":"https:\/\/opensource.org\/blog\/licensediscuss012019"}}},"tm_categories":"","forceEnableStats":"","preview":"","clean_cookies":"","aria_label":"Click to accept {category} cookies and enable this content"};
1228
+ var complianz = {"prefix":"cmplz_","user_banner_id":"1","set_cookies":[],"block_ajax_content":"","banner_version":"45","version":"7.1.0","store_consent":"","do_not_track_enabled":"1","consenttype":"optin","region":"eu","geoip":"","dismiss_timeout":"","disable_cookiebanner":"1","soft_cookiewall":"","dismiss_on_scroll":"","cookie_expiry":"365","url":"https:\/\/opensource.org\/wp-json\/complianz\/v1\/","locale":"lang=en&locale=en_US","set_cookies_on_root":"","cookie_domain":"","current_policy_id":"16","cookie_path":"\/","categories":{"statistics":"statistics","marketing":"marketing"},"tcf_active":"","placeholdertext":"Click to accept {category} cookies and enable this content","css_file":"https:\/\/opensource.org\/wp-content\/uploads\/complianz\/css\/banner-{banner_id}-{type}.css?v=45","page_links":{"eu":{"cookie-statement":{"title":"","url":"https:\/\/opensource.org\/blog\/co-designing-the-osaid-a-highlight-from-nerdearla"}}},"tm_categories":"","forceEnableStats":"","preview":"","clean_cookies":"","aria_label":"Click to accept {category} cookies and enable this content"};
1228
1229
  /* ]]> */
1229
1230
  </script>
1230
1231
  <script defer type="text/javascript" src="https://149753425.v2.pressablecdn.com/wp-content/plugins/complianz-gdpr/cookiebanner/js/complianz.min.js?ver=1717180759" id="cmplz-cookiebanner-js"></script>
@@ -1232,8 +1233,8 @@ var complianz = {"prefix":"cmplz_","user_banner_id":"1","set_cookies":[],"block_
1232
1233
  </body>
1233
1234
  </html>
1234
1235
  <!--
1235
- generated 176 seconds ago
1236
- generated in 0.522 seconds
1237
- served from batcache in 0.002 seconds
1238
- expires in 124 seconds
1236
+ generated 4 seconds ago
1237
+ generated in 0.578 seconds
1238
+ served from batcache in 0.003 seconds
1239
+ expires in 296 seconds
1239
1240
  -->
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@effekt-lang/effekt",
3
3
  "author": "Jonathan Brachthäuser",
4
- "version": "0.3.0",
4
+ "version": "0.5.0",
5
5
  "repository": {
6
6
  "type": "git",
7
7
  "url": "git+https://github.com/effekt-lang/effekt.git"
@@ -1,118 +0,0 @@
1
- (define-syntax delayed
2
- (syntax-rules ()
3
- [(_ e ...)
4
- (lambda (k) (k
5
- (begin e ...)))]))
6
-
7
-
8
- ;; EVIDENCE
9
-
10
- (define (here x) x)
11
-
12
- ; (define-syntax lift
13
- ; (syntax-rules ()
14
- ; [(_ m)
15
- ; (lambda (k1)
16
- ; (lambda (k2)
17
- ; (m (lambda (a) ((k1 a) k2)))))]))
18
-
19
- (define (lift m)
20
- (lambda (k1)
21
- (lambda (k2)
22
- (m (lambda (a) ((k1 a) k2))))))
23
-
24
- (define-syntax nested-helper
25
- (syntax-rules ()
26
- [(_ (ev) acc) (ev acc)]
27
- [(_ (ev1 ev2 ...) acc)
28
- (nested-helper (ev2 ...) (ev1 acc))]))
29
-
30
- (define-syntax nested
31
- (syntax-rules ()
32
- [(_ ev1 ...) (lambda (m) (nested-helper (ev1 ...) m))]))
33
-
34
-
35
- ;; HANDLING
36
-
37
- ; (define (reset m) (m (lambda (v) (lambda (k) (k v)))))
38
-
39
- (define-syntax reset
40
- (syntax-rules ()
41
- [(_ m)
42
- (m (lambda (v) (lambda (k) (k v))))]))
43
-
44
- ; ;; EXAMPLE
45
- ; ; (handle ([Fail_22 (Fail_109 () resume_120 (Nil_74))])
46
- ; ; (let ((tmp86_121 ((Fail_109 Fail_22))))
47
- ; ; (Cons_73 tmp86_121 (Nil_74))))
48
-
49
-
50
- ; capabilities first take evidence than require selection!
51
- (define-syntax handle
52
- (syntax-rules ()
53
- [(_ (cap1 ...) body)
54
- (reset (body lift cap1 ...))]))
55
-
56
-
57
- (define-syntax shift
58
- (syntax-rules ()
59
- [(_ ev body)
60
- (ev body)]))
61
-
62
- ; capabilities first take evidence than require selection!
63
- (define-syntax handle-old
64
- (syntax-rules ()
65
- [(_ ((cap1 (op1 (arg1 ...) kid exp) ...) ...) body)
66
- (reset (body lift
67
- (cap1 (define-effect-op ev (arg1 ...) kid exp) ...) ...))]))
68
-
69
- (define-syntax define-effect-op
70
- (syntax-rules ()
71
- [(_ ev1 (arg1 ...) kid exp ...)
72
- (lambda (ev1 arg1 ...)
73
- ; we apply the outer evidence to the body of the operation
74
- (ev1 (lambda (resume)
75
- ; k itself also gets evidence!
76
- (let ([kid (lambda (ev v) (ev (resume v)))])
77
- exp ...))))]))
78
-
79
- (define (with-region-non-mono body)
80
- (define arena (make-arena))
81
-
82
- (define (lift m) (lambda (k)
83
- ; on suspend
84
- (define fields (backup arena))
85
- (m (lambda (a)
86
- ; on resume
87
- (restore fields)
88
- (k a)))))
89
-
90
- (body lift arena))
91
-
92
- (define (with-region body)
93
- (define arena (make-arena))
94
-
95
- (body arena))
96
-
97
-
98
- ; An Arena is a pointer to a list of cells
99
- (define (make-arena) (box '()))
100
-
101
- (define (fresh arena init)
102
- (let* ([cell (box init)]
103
- [cells (unbox arena)])
104
- (set-box! arena (cons cell cells))
105
- cell))
106
-
107
- ; Backup = List<(Cell, Value)>
108
-
109
- ; Arena -> Backup
110
- (define (backup arena)
111
- (let ([fields (unbox arena)])
112
- (map (lambda (cell) (cons cell (unbox cell))) fields)))
113
-
114
- ; Backup -> ()
115
- (define (restore data)
116
- (for-each (lambda (cell-data)
117
- (set-box! (car cell-data) (cdr cell-data)))
118
- data))
@@ -1,282 +0,0 @@
1
- module io/files
2
-
3
- import bytes
4
-
5
- import io
6
- import io/error
7
-
8
- extern js """
9
- const fs = require("fs");
10
- """
11
-
12
- extern type FileDescriptor
13
- // = llvm: 32bit integer extended to 64bit and stored into the "tag" of "Pos"
14
- // = js: FileHandle (https://nodejs.org/api/fs.html#class-filehandle)
15
-
16
- extern pure def show(fd: FileDescriptor): String =
17
- llvm """
18
- %res = call %Pos @c_filedescriptor_show(%Pos %fd)
19
- ret %Pos %res
20
- """
21
-
22
-
23
- /**
24
- * An abstract interface applications can program against.
25
- *
26
- * Can be interpreted into AsyncIO with the `filesystem`
27
- * handler, or virtualized etc.
28
- *
29
- * See example below.
30
- */
31
- interface Files {
32
- def readFile(path: String): String
33
- def writeFile(path: String, contents: String): Unit
34
- }
35
-
36
- /**
37
- * Represents the file opening modes with their respective flags
38
- */
39
- type Mode {
40
- // Most common modes
41
- Append() // 'a' created if does not exist
42
- ReadAppend() // 'a+' created if does not exist
43
- ReadOnly() // 'r' exception if does not exist
44
- ReadWrite() // 'w+' created if does not exist, truncated if exists
45
- Write() // 'w' created if does not exist, truncated if exists
46
-
47
- // Other modes
48
- AppendExclusive() // 'ax' created if does not exist, fails if exists
49
- ReadAppendExclusive() // 'ax+' created if does not exist, fails if exists
50
- AppendSync() // 'as' created if does not exist, append in synchronous mode
51
- ReadAppendSync() // 'as+' created if does not exist, append in synchronous mode
52
- ReadSync() // 'rs' exception if does not exist, read in synchronous mode
53
- ReadWriteSync() // 'rs+' exception if does not exist, read/write in synchronous mode
54
- WriteExclusive() // 'wx' created if does not exist, truncated if exists, fails if exists
55
- ReadWriteExclusive() // 'wx+' created if does not exist, truncated if exists, fails if exists
56
- }
57
-
58
- def modeName(modes: Mode): String = modes match {
59
- case Append() => "a"
60
- case ReadAppend() => "a+"
61
- case ReadOnly() => "r"
62
- case ReadWrite() => "w+"
63
- case Write() => "w"
64
- case AppendExclusive() => "ax"
65
- case ReadAppendExclusive() => "ax+"
66
- case AppendSync() => "as"
67
- case ReadAppendSync() => "as+"
68
- case ReadSync() => "rs"
69
- case ReadWriteSync() => "rs+"
70
- case WriteExclusive() => "wx"
71
- case ReadWriteExclusive() => "wx+"
72
- }
73
-
74
-
75
- /**
76
- * Using the file system via node.js
77
- */
78
- def filesystem[R] { program: => R / Files }: R / { AsyncIO, Exception[IOError] } = // TODO move Exception to be bidirectional
79
- try { program() }
80
- with Files {
81
- def readFile(path) = resume(readFile(path))
82
- def writeFile(path, contents) = resume(writeFile(path, contents))
83
- }
84
-
85
-
86
- // AsyncIO-based API (default)
87
- // ---------------------------
88
-
89
- /**
90
- * Reads a file at given path as utf8 encoded string.
91
- */
92
- def readFile(path: String): String / { AsyncIO, Exception[IOError] } = {
93
- val fd = openFile(path, ReadOnly());
94
- with on[IOError].finalize { closeFile(fd) }
95
-
96
- val readSize = 1048576 // 1MB
97
- var size = readSize
98
- var buffer = bytes(size)
99
- var offset = 0;
100
-
101
- def go(): String = {
102
- readFile(fd, buffer.slice(offset, min(readSize, size - offset)), -1) match {
103
- case 0 =>
104
- buffer.slice(0, offset).toUTF8
105
- case n and n < 0 => panic("Error!")
106
- case n =>
107
- offset = offset + n
108
-
109
- // we are at maximum capacity
110
- if (n == readSize && (offset + readSize) > size) {
111
- val newSize = size * 2
112
- val newBuffer = bytes(newSize)
113
- copy(buffer, newBuffer, 0, 0, size)
114
- buffer = newBuffer
115
- size = newSize
116
- }
117
- go()
118
- }
119
- }
120
-
121
- go()
122
- }
123
-
124
- /**
125
- * Writes the (utf8 encoded) string `contents` into the specified file.
126
- */
127
- def writeFile(path: String, contents: String): Unit / { AsyncIO, Exception[IOError] } = {
128
- val fd = openFile(path, Write());
129
- with on[IOError].finalize { closeFile(fd) }
130
-
131
- val writeSize = 1048576 // 1MB
132
-
133
- // this induces a memcpy that is not strictly necessary, since we use the buffer read-only
134
- val buffer = contents.fromUTF8
135
- val size = buffer.size
136
-
137
- var offset = 0;
138
- def remaining() = size - offset
139
-
140
- def go(): Unit =
141
- writeFile(fd, buffer.slice(offset, min(writeSize, remaining())), -1) match {
142
- case 0 => ()
143
- case n and n < 0 => panic("Error!")
144
- case n =>
145
- offset = offset + n;
146
- if (remaining() > 0) go()
147
- }
148
-
149
- go()
150
- }
151
-
152
- /**
153
- * Opens the file at given path using the specified mode (read, write, etc.)
154
- */
155
- def openFile(path: String, flags: Mode): FileDescriptor / { AsyncIO, Exception[IOError] } =
156
- do performIO(box { k =>
157
- val res = callback::openFile(path, flags,
158
- box { fd => k(Success(fd)) },
159
- box { error => k(Error(error, "Error opening file: " ++ error.message)) });
160
- ()
161
- }).value
162
-
163
- def readFile(fd: FileDescriptor, buffer: Bytes, offset: Int): Int / { AsyncIO, Exception[IOError] } =
164
- do performIO(box { k =>
165
- callback::readFile(fd, buffer, offset,
166
- box { n => k(Success(n)) },
167
- box { error => k(Error(error, "Error reading from file: " ++ error.message)) })
168
- }).value
169
-
170
- def writeFile(fd: FileDescriptor, buffer: Bytes, offset: Int): Int / { AsyncIO, Exception[IOError] } =
171
- do performIO(box { k =>
172
- callback::writeFile(fd, buffer, offset,
173
- box { n => k(Success(n)) },
174
- box { n =>
175
- val error = n.fromCode
176
- k(Error(error, "Error writing to file: " ++ error.message))
177
- })
178
- }).value
179
-
180
- extern io def closeFile(fd: FileDescriptor): Unit =
181
- js "fs.close(${fd}, () => $effekt.unit)"
182
- llvm """
183
- ; extract the filedescriptor from the tag of the Pos
184
- %tag = extractvalue %Pos ${fd}, 0
185
- %fd_int = trunc i64 %tag to i32
186
-
187
- call void @c_file_close(i32 %fd_int)
188
- ret %Pos zeroinitializer
189
- """
190
-
191
-
192
- // Callback-based API
193
- // ------------------
194
- // mostly used as an implementation detail.
195
- namespace callback {
196
-
197
- def openFile(path: String, mode: Mode,
198
- onSuccess: FileDescriptor => Unit at {io, global},
199
- onFailure: IOError => Unit at {io, global}): Unit =
200
- openFile(path, modeName(mode), onSuccess, box { code => onFailure(fromCode(code)) })
201
-
202
- def readFile(fd: FileDescriptor, buffer: Bytes, offset: Int,
203
- onSuccess: (Int) => Unit at {io, global},
204
- onFailure: IOError => Unit at {io, global}): Unit =
205
- readFile(fd, buffer, offset, onSuccess, box { code => onFailure(fromCode(code)) })
206
-
207
- // The following are supposed to be internal
208
-
209
- extern io def openFile(path: String, mode: String,
210
- onSuccess: (FileDescriptor) => Unit at {io, global},
211
- onFailure: (Int) => Unit at {io, global}): Unit =
212
- js "openFile(${path}, ${mode}, ${onSuccess}, ${onFailure})"
213
- llvm """
214
- ; stack allocate
215
- %onSuccess_ptr = alloca %Neg
216
- store %Neg %onSuccess, %Neg* %onSuccess_ptr
217
-
218
- %onFailure_ptr = alloca %Neg
219
- store %Neg %onFailure, %Neg* %onFailure_ptr
220
-
221
- call void @c_file_open(%Pos ${path}, %Pos ${mode}, ptr %onSuccess_ptr, ptr %onFailure_ptr) #0
222
- ret %Pos zeroinitializer
223
- """
224
-
225
- extern io def readFile(fd: FileDescriptor, buffer: Bytes, offset: Int,
226
- onSuccess: (Int) => Unit at {io, global},
227
- onFailure: (Int) => Unit at {io, global}): Unit =
228
- js "readFile(${fd}, ${buffer}, ${offset}, ${onSuccess}, ${onFailure})"
229
- llvm """
230
- ; extract the filedescriptor from the tag of the Pos
231
- %tag = extractvalue %Pos %${fd}, 0
232
- %fd_int = trunc i64 %tag to i32
233
-
234
- ; stack allocate
235
- %onSuccess_ptr = alloca %Neg
236
- store %Neg ${onSuccess}, %Neg* %onSuccess_ptr
237
-
238
- %onFailure_ptr = alloca %Neg
239
- store %Neg ${onFailure}, %Neg* %onFailure_ptr
240
-
241
- call void @c_file_read(i32 %fd_int, %Pos ${buffer}, i64 noundef ${offset}, ptr %onSuccess_ptr, ptr %onFailure_ptr) #0
242
- ret %Pos zeroinitializer
243
- """
244
-
245
- extern io def writeFile(fd: FileDescriptor, buffer: Bytes, offset: Int,
246
- onSuccess: (Int) => Unit at {io, global},
247
- onFailure: (Int) => Unit at {io, global}): Unit =
248
- js "writeFile(${fd}, ${buffer}, ${offset}, ${onSuccess}, ${onFailure})"
249
- llvm """
250
- ; extract the filedescriptor from the tag of the Pos
251
- %tag = extractvalue %Pos ${fd}, 0
252
- %fd_int = trunc i64 %tag to i32
253
-
254
- ; stack allocate
255
- %onSuccess_ptr = alloca %Neg
256
- store %Neg ${onSuccess}, %Neg* %onSuccess_ptr
257
-
258
- %onFailure_ptr = alloca %Neg
259
- store %Neg ${onFailure}, %Neg* %onFailure_ptr
260
-
261
- call void @c_file_write(i32 %fd_int, %Pos ${buffer}, i64 noundef ${offset}, ptr %onSuccess_ptr, ptr %onFailure_ptr) #0
262
- ret %Pos zeroinitializer
263
- """
264
- }
265
-
266
-
267
- namespace examples {
268
-
269
- // Example illustrating using abstract files interface
270
- // and interpreting it into asynchronous IO
271
- def copy(from: String, to: String): Unit / Files = {
272
- val contents = do readFile(from)
273
- do writeFile(to, contents)
274
- }
275
-
276
- def main() = eventloop(box {
277
- with on[IOError].panic;
278
- with filesystem;
279
-
280
- copy("README.md", "out/test.md")
281
- })
282
- }