6 comments

  • davidee26 minutes ago
    Perhaps relevant: <a href="https:&#x2F;&#x2F;campedersen.com&#x2F;loon" rel="nofollow">https:&#x2F;&#x2F;campedersen.com&#x2F;loon</a><p>This looks like a really neat project&#x2F;idea; seeing the road map is exciting too, nearly everything I&#x27;d want.<p>I don&#x27;t love the brackets syntax, or the [op val1 val2] ([* x x]) style, but I appreciate the attempt at clarity and consistency and none of these things are dealbreakers.<p>I do wonder why they&#x27;ve leaned so hard into talking about the type system being out of sight. Again, not a dealbreaker, but I feel strongly that explicit typing has a place in codebases beyond &quot;describe something because you have to&quot;.<p>Strongly typed languages strike me as providing detailed hints throughout the codebase about what &quot;shape&quot; I need my data in or what shape of data I&#x27;m dealing with (without needing to lean on an LSP). I find it makes things very readable, almost self-documenting when done right.<p>From their docs about their choices: &quot;The reasoning is simple: types exist to help the compiler catch your mistakes. They do not exist to help you express intent, at least not primarily.&quot; This strikes me as unnecessarily pedantic; as someone reading more code than I write (even my own), seeing a type distinctly—particular as part of a function signature—helps me understand (or add strong context) to the original author&#x27;s goal before I even get to reading the implementation.<p>I find this doubly so when working through monadic types where I may get a typed error, a value, and have it all wrapped in an async promise of some kind (or perhaps an effect or two).<p>By the same token many languages allow you to leave out type annotations where they may be simple or clearly implied (and&#x2F;or inferred by the compiler), so again, I&#x27;m not understanding the PoV (or need) for these claims. Perhaps Loon simply does it better? Am I missing something? Can I write return types to stub functions?<p>From the above blog post: &quot;That&#x27;s how good type inference feels! You write code. The types are just there. Because the language can see where it&#x27;s going.&quot; Again, it feels strongly geared towards a world where we value writing code over reading&#x2F;maintaining&#x2F;understanding code, but maybe that&#x27;s just my own bias&#x2F;limitations.<p>Will follow it closely.
    • wk_end2 minutes ago
      Yeah, the idea that types exist just to help the compiler catch your mistakes shows a depressingly superficial understanding of the benefits of static typing.<p>Types exist so that the compiler can reason about your code better - but not incidentally, they also help <i>you</i> reason about your code better!<p>To wit: even when working in dynamic languages, it&#x27;s often considered a good practice to write down in docstrings the types of objects a function can operate on, even without static enforcement. Thinking about types is helpful for humans, too.<p>And it&#x27;s not even just a thing to help you read code in the future - types help me <i>write</i> code, because as I sit down to write a function I know the possible values and states and capabilities of the object I&#x27;m working with. In the best of cases I can analytically handle all the possible cases of the object, almost automatically - the code flows out of the structure of the type.
  • luckymate35 minutes ago
    I think I am in love. Clojure + Rust, everything is typed, but I don&#x27;t need to annotate. And algebraic effects that I really wanted to explore in Ocaml, but now can do it in language with way easier syntax. I might be missing bit of Clojure dynamic nature, but it looks like a bunch of really interesting ideas in one language.
    • christophilus8 minutes ago
      Yeah. Clojure is by far my favorite dynamic language. But, I love static types. At a glance, a quick glance at Loon- looks like it could just flat out become my favorite language. Loon with a standard library that approaches Go’s would be :chefskiss:
  • cptroot17 minutes ago
    Neat! I think the website could use a bit more information about how the &quot;global&quot; Effect handlers work, and whether it&#x27;s possible to opt-in to that functionality yourself when writing Effects.<p>That being said I took a look at the roadmap and the next major release is the one that focuses on Effects, so perhaps I&#x27;m jumping the gun a tad. Maybe I&#x27;ll whip this out for AoC this year!
  • phpnode1 hour ago
    The pattern matching example has a type Shape which is never referenced and this seems to conflict with the idea that you never write a type, am I missing something obvious?
    • KPGv258 minutes ago
      I think they mean you never write types for your variables or functions. They don&#x27;t mean you can&#x27;t create types. That&#x27;s the reference to Hindley–Milner type system and type inference. You don&#x27;t have to say<p>x : Nat x = 5<p>You just say x = 5<p>I personally don&#x27;t like that you don&#x27;t seem to be able to manually describe the type for a fn&#x2F;var, because it&#x27;s very useful when prototyping to write stubs where you provide the typedef but then the actual variable&#x2F;function is just marked as &quot;todo&quot;
  • weitendorf1 hour ago
    Very cool! I’ve been flirting with the idea of biting the bullet and moving more towards language extensions around protobuf&#x2F;grpc vs just tools so it’s really great to see projects on the other side of that kind of decision shipping and what choices they made<p>Why the square brackets in particular? Notation is such an annoying part of this stuff, I’m actually leaning towards pushing a lot of structure to the filesystem
  • xigoi35 minutes ago
    Looks great! However, the website is really slow. Every page takes several seconds to load and trying to open the reference freezes my browser.