@effekt-lang/effekt 0.3.0 → 0.4.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 (38) 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 +11 -16
  5. package/libraries/common/bench.effekt +32 -6
  6. package/libraries/common/effekt.effekt +30 -69
  7. package/libraries/common/exception.effekt +0 -1
  8. package/libraries/common/io/console.effekt +32 -36
  9. package/libraries/common/io/error.effekt +111 -2
  10. package/libraries/common/io/filesystem.effekt +274 -0
  11. package/libraries/common/io/network.effekt +30 -54
  12. package/libraries/common/io/time.effekt +9 -12
  13. package/libraries/common/io.effekt +54 -124
  14. package/libraries/common/list.effekt +18 -0
  15. package/libraries/common/process.effekt +0 -1
  16. package/libraries/common/ref.effekt +4 -7
  17. package/libraries/common/string/tty.effekt +66 -0
  18. package/libraries/common/string.effekt +0 -34
  19. package/libraries/common/test.effekt +96 -34
  20. package/libraries/js/unsafe/cont.effekt +1 -1
  21. package/libraries/llvm/io.c +258 -378
  22. package/libraries/llvm/main.c +3 -0
  23. package/libraries/llvm/rts.ll +57 -38
  24. package/libraries/llvm/types.c +10 -1
  25. package/licenses/eclipse public license, version 2.0 - epl-2.0.html +4 -4
  26. package/licenses/mit license - mit-license.html +19 -19
  27. package/licenses/the bsd license - bsd-license.html +19 -19
  28. package/licenses/the mit license - mit.html +20 -20
  29. package/package.json +1 -1
  30. package/libraries/chez/lift/effekt.ss +0 -118
  31. package/libraries/common/io/files.effekt +0 -282
  32. package/libraries/js/io.js +0 -143
  33. package/libraries/llvm/io.ll +0 -19
  34. package/libraries/ml/effekt.sml +0 -65
  35. package/libraries/ml/internal/mllist.effekt +0 -9
  36. package/libraries/ml/internal/mloption.effekt +0 -18
  37. package/libraries/ml/random.effekt +0 -85
  38. 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' />
@@ -267,8 +267,7 @@ window._wpemojiSettings = {"baseUrl":"https:\/\/s.w.org\/images\/core\/emoji\/15
267
267
  </style>
268
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' />
269
269
  <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>
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.7' type='text/css' media='all' />
272
271
  <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
272
  <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
273
  <script type="text/javascript" id="wp-i18n-js-after">
@@ -295,11 +294,11 @@ jQuery(function(jQuery){jQuery.datepicker.setDefaults({"closeText":"Close","curr
295
294
  <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
295
  <script type="text/javascript" id="events-manager-js-extra">
297
296
  /* <![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"};
297
+ 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":"909f77b5a9","attendance_api_url":"https:\/\/opensource.org\/wp-json\/events-manager\/v1\/attendance"};
299
298
  /* ]]> */
300
299
  </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>
300
+ <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>
301
+ <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
302
  <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
303
  <script type="text/javascript" id="plausible-analytics-js-after">
305
304
  /* <![CDATA[ */
@@ -1200,31 +1199,32 @@ var wpcf7 = {"api":{"root":"https:\/\/opensource.org\/wp-json\/","namespace":"co
1200
1199
  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
1200
  /* ]]> */
1202
1201
  </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>
1202
+ <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>
1203
+ <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
1204
  <script type="text/javascript" id="jetpack-instant-search-js-before">
1205
1205
  /* <![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"));
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%22909f77b5a9%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
1207
  /* ]]> */
1208
1208
  </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>
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=868fd0077d5a6e3eaac5" 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=202440" id="jp-tracks-js"></script>
1211
1211
  <script type="text/javascript" id="osi-theme-scripts-js-before">
1212
1212
  /* <![CDATA[ */
1213
1213
  const OSI_LICENSE_DB = {"ajaxURL":"https:\/\/opensource.org\/wp-admin\/admin-ajax.php","action":"osi_license_db"}
1214
1214
  /* ]]> */
1215
1215
  </script>
1216
1216
  <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>
1217
+ <script data-service="jetpack-statistics" data-category="statistics" type="text/plain" data-cmplz-src="https://stats.wp.com/e-202440.js" id="jetpack-stats-js" data-wp-strategy="defer"></script>
1218
1218
  <script type="text/javascript" id="jetpack-stats-js-after">
1219
1219
  /* <![CDATA[ */
1220
1220
  _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\"}") ]);
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.7\"}") ]);
1222
1222
  _stq.push([ "clickTrackerInit", "210318891", "395" ]);
1223
1223
  /* ]]> */
1224
1224
  </script>
1225
1225
  <script type="text/javascript" id="cmplz-cookiebanner-js-extra">
1226
1226
  /* <![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"};
1227
+ var complianz = {"prefix":"cmplz_","user_banner_id":"1","set_cookies":[],"block_ajax_content":"","banner_version":"44","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=44","page_links":{"eu":{"cookie-statement":{"title":"","url":"https:\/\/opensource.org\/meeting-minutes\/2020-05-11"}}},"tm_categories":"","forceEnableStats":"","preview":"","clean_cookies":"","aria_label":"Click to accept {category} cookies and enable this content"};
1228
1228
  /* ]]> */
1229
1229
  </script>
1230
1230
  <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 +1232,8 @@ var complianz = {"prefix":"cmplz_","user_banner_id":"1","set_cookies":[],"block_
1232
1232
  </body>
1233
1233
  </html>
1234
1234
  <!--
1235
- generated 176 seconds ago
1236
- generated in 0.522 seconds
1237
- served from batcache in 0.002 seconds
1238
- expires in 124 seconds
1235
+ generated 25 seconds ago
1236
+ generated in 0.531 seconds
1237
+ served from batcache in 0.003 seconds
1238
+ expires in 275 seconds
1239
1239
  -->
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.4.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
- }