Show HN: Cixl – a minimal, decently typed scripting language
I enjoy seeing new experimental languages.  I really enjoyed working through the README exercises. It&#x27;s the <i>perfect</i> way to document and teach a language all in one go.  The REPL worked great.<p>First, I love how you&#x27;ve chosen to have functions wait for the correct number of arguments to exist on the stack before executing.  I&#x27;ve often pondered how to make Forth-like languages less painful to program - your solution is very clever!<p>Speaking of clever, I felt very clever indeed when I took your infix equality example:<p><pre><code>    | 42 == 42
  [#t]
</code></pre>
and it worked when re-ordered as postfix:<p><pre><code>    | 42 42 ==
  [#t]
</code></pre>
...indicating two things: 1) I actually understood what was happening and 2) the language is coherent.<p>It&#x27;s great that basic IO so simple with &#x27;say&#x27; and &#x27;ask&#x27;.  That allows somebody to jump in immediately and start making fun things!<p><pre><code>    | let name ask &#x27;Who are you? &#x27;;
    say $name
</code></pre>
Love the syntax for lambdas: { ... }<p>What is the rationale for requiring function implementations of the same name to have the same arity?  Nevermind!  I just answered my own question: because functions need to know how many parameters to seek from the stack.<p>The literal values for function arguments is awesome - pattern matching!<p>I don&#x27;t understand this example demonstrating an &quot;index&quot; for the function parameter types:<p><pre><code>    func: baz(x y Int z T0) $x + $y + $z;
</code></pre>
I assume &#x27;T0&#x27; is the aforementioned index?  But I&#x27;m struggling to see how it works from this example.  Maybe I&#x27;m just missing an idiom from some other language?<p>Bizarro Question: Is there any way you can &#x27;delete&#x27; a function in the REPL?  For example, to be able to re-use the name &#x27;foo&#x27; as a function with a different arity.  (It&#x27;s fine if you can&#x27;t.  The ability would be useless in an actual program.)<p>You have an error in the README example for &quot;Argument types may be specified in angle brackets...&quot;:<p><pre><code>    | &amp;+&lt;Int&gt;
  ...
  Error in row 1, col 6:
  Func imp not found
</code></pre>
But at least I was able to guess the correct syntax, yay!:<p><pre><code>   | &amp;+&lt;Int Int&gt;
  ...
  [Fimp(+ Int Int)]
</code></pre>
Dates: I&#x27;m confused about the lack of a function called &#x27;year&#x27; (singular) since &#x27;day&#x27; and &#x27;month&#x27; exist. Otherwise, I&#x27;m impressed.  Dates are damned hard.<p>Everything about this language seems to be aimed at maximum brevity without sacrificing clarity.  I like that a lot.  Congratulations for getting this far and I&#x27;ll definitely be bookmarking this.<p>I would love to see some longer programs written in Cixl to get a sense for what they look like and how they&#x27;d be structured.<p>How long have you been working on this?  How long have you been dreaming about it?  And how it is pronounced (SIX-el, KIX-el)?