• superfes
    link
    fedilink
    arrow-up
    58
    ·
    2 years ago

    I’ve written some magic templates that I assume are not easy to read by those who don’t know.

    But this is seemingly unmaintainable… terrifying… and kind of neat.

  • GissaMittJobb@lemmy.ml
    link
    fedilink
    arrow-up
    53
    arrow-down
    1
    ·
    2 years ago

    This doesn’t actually read as serious TypeScript, moreso as someone trying to showcase unhinged code.

    I’d be happy to be proven wrong with a link to the source code so that I can look the beast in the eye.

  • clericc
    link
    fedilink
    arrow-up
    30
    ·
    edit-2
    2 years ago

    After 5 minutes of staring at it: Its typesystem sudoku. Each row and each col in the grid must add up to 15 (T<>), bit each number in the grid must be different (Df<>).

    Grid will only be a type alias for the value true (google “Dependent types”) only if all Type Parameters (wich are values) hold up to the Sudoku conditions).

    The file would not compile with “true as Grid” when grid type-aliases to false.

    Fun to understand.

    EDIT: too late

  • thesporkeffect
    link
    fedilink
    arrow-up
    29
    ·
    2 years ago

    I like to think I can usually look at code in languages I don’t know and still get the gist of what it does but I am drawing a complete blank. Is this even slightly legible to anyone and if yes please explain

    • MinekPo1@lemmy.ml
      link
      fedilink
      English
      arrow-up
      44
      ·
      2 years ago

      TL;DR: Grid simplifies to true, if and only if it is a 3x3 magic square.

      full explanation
      • Fifteen is an array of length 15
      • T checks if an array of length A+B+C is equivalent to an array of length 15, thus checking if A+B+C is equal to 15
      • And is simplifies to X if A is true, else it simplifies to false
      • Df checks if A and B are Diffrent , simplifying to X if they are
      • Grid first checks if every row, column and diagonal is equal to 15, then checks if every item is unique.
    • SloppyPuppy
      link
      fedilink
      arrow-up
      4
      arrow-down
      1
      ·
      edit-2
      2 years ago

      Yea, i was really trying to understand… and then I was like yeah fuck this and regex too.

      • mvirts
        link
        fedilink
        arrow-up
        1
        ·
        edit-2
        2 years ago

        Gotta learn regex… C++ not so much 😹

        Fear not, template abuse is not a necessary practice

        Edit: wait what is this I thought it was c++ at first. Java? C#? Has an extends keyword

        • immutabletest
          link
          fedilink
          arrow-up
          4
          ·
          edit-2
          2 years ago

          This is a Typescript type-level computation (which is Turing-complete AFAIK). However this kind of trickery is usually done for fun and to explore how much could be achieved just on the compile step.

          • mvirts
            link
            fedilink
            arrow-up
            1
            ·
            2 years ago

            Lol thanks that saves me a lot of googling 😹 that makes a lot of sense

  • algernon@lemmy.ml
    link
    fedilink
    arrow-up
    11
    ·
    2 years ago

    I think I can pinpoint the exact date things went sideways. It was a dark day on Monday, October 1, 2012.

  • 9point6
    link
    fedilink
    arrow-up
    10
    ·
    edit-2
    2 years ago

    I’m really trying to figure out what this is used for and why it was done this way.

    I’m not having much success

    • platypus_plumba
      link
      fedilink
      arrow-up
      5
      ·
      2 years ago

      Looks like something that checks that the rows in a grid att up to 15. Why? IDK, a game?

  • Aurenkin@sh.itjust.works
    link
    fedilink
    arrow-up
    9
    ·
    2 years ago

    This seems like a generic type of problem that could happen to anyone. Hopefully we can learn from this and avoid appending it to our already large grid of problems.

  • toastal@lemmy.ml
    link
    fedilink
    arrow-up
    3
    ·
    2 years ago

    If TypeScript didn’t have terrible type-level ergonomics, this wouldn’t look so bad—even if this toy example is largely just a brain exercise