> That approach isn't working for you, and it's trying the patience of the cafe. (These are sub-beginner level q's, please use the Beginners' forum....)

According to https://www.haskell.org/mailing-lists/ , the purpose of haskell-cafe is "General Haskell questions; extended discussions. Forum in which it’s acceptable to ask anything, no matter how naive, and get polite replies."  The OP's questions and efforts are more than appropriate here, and they should expect no less than polite, if not helpful, responses here.

AntC, your replies are not at all polite, and you seem to be misinformed of the purpose of this mailing list.  Please help us maintain a more appropriate environment here in the future, and I would ask the haskell-cafe moderators to assist in this as well.  If you want to direct someone to a different forum, please do so politely and without insulting them.

--Aaron V.



On Mon, Apr 5, 2021 at 4:19 PM Anthony Clayden <anthony_clayden@clear.net.nz> wrote:
This whole exercise is my attempt to translate *The Littler MLer* and its last chapter where they go into functors.

That approach isn't working for you, and it's trying the patience of the cafe. (These are sub-beginner level q's, please use the Beginners' forum. And I'd forgotten that's what you're doing. Your first post in this thread should have said you're talking about ML functors. https://stackoverflow.com/questions/2030863/in-functional-programming-what-is-a-functor#:~:text=In%20the%20ML%20family%20of,programmers%20have%20difficulty%20with%20it. says "most beginning programmers have difficulty with [functors]".)

I suggest you first go through a Haskell tutorial, and get your knowledge secure of idiomatic Haskell. Even so, I just don't believe you're coming from idiomatic ML. Unless 'The Little MLer' is giving it as obfuscated code, and the objective is to de-obfuscate it.

I'd code your `plus2` with pattern-matching:

> plus2 :: MyNum -> MyNum -> MyNum
> plus2 MNZero m = m
> plus2 (OneMoreThan n') m = OneMoreThan $ plus2 n' m

Your test for `(x == MNZero)` inside helper function `pCessor` is useless: flow-of-control doesn't take the outer `else` branch unless `x` (i.e. `n`) is _not_ equal `MNZero`.

Similar redundant code in the case for `Int`. But that has bigger problems, as Olaf points out: `Int`s can be negative. So if `plus` is called with a negative `n`, it'll call `pCessor` repeatedly until stack overflow (or numeric underflow).

AntC
_______________________________________________
Haskell-Cafe mailing list
To (un)subscribe, modify options or view archives go to:
http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe
Only members subscribed via the mailman list are allowed to post.