It is the famous Landin's knot.
This comment is hidden because it contains spoiler information about the solution
No more rust ~~
The description is actually terrifying... Well, since I've seen your other kata, I've got a fair idea of how this one is going to go. 🦥
One day, I'm going to click "Train" on this kata—one day!
It doesn't compile for rust anymore :(
FWIW I think this is a great way to demonstrate some limitations of Haskell, as powerful its type system can be. Often laws are enforced in our heads only, but they're extremely important for reasoning with code. Thanks to the creator and those who gave hints!
There used to be a translations for Java, Kotlin, Dart, etc... But these languages tends to be trickier than Haskell and one cannot guarantee the users understands the purpose of this Kata (in particular the unMaybe function, Java users used a lot of hacks to make them work). So I think at least my attitude towards Scala would be negative, sorry.
As you can see the Java, Dart, Kotlin translations are already deleted.
I think the topic isomorphism means more things than constructing bijections. Finishing this kata only requires us to think about making one-to-one correspondence between two certains sets, yet the name isomorphism makes me think that there should be some closed operations on these two sets, which corresponds to each other.
What's the difference? Honest question.
Interesting kata with instructive hints! Thank you.
I'm currently learning functional programming and type theory and this has been a really great Kata to introduce me to the concept.
I took some time to add a Scala Translation. Please review.
This is so mad but to tell the truth I had the same kata idea and I fully support it.
Hey, lolisa. You don't have to understand category theory to grok the Category typeclass in Haskell. It's just a typeclass with some laws and some operators for composition. Very cool to mess with though as you can 'break' — uhhh, I mean improve — a lot of things!
ranks cant be changed
C# tests are failing - firstly because AreEqual is trying to compare instances instead of values (which always fails, because of new), two - when trying to attempt, they fail to compile because of the lack of the function IsoMaybe (changing Maybe to IsoMaybe in sources helps somehow, but still leaves us with the first problem).
So - basically, the kata for C# is broken, it is worth to consider some changes.
Great ! I hope that Peano and Church will be translated in Rust one day :D