What is the equivalent to (+1) for the subtraction, since (-1) is seen as a negative number? [duplicate]

StackOverflow https://stackoverflow.com/questions/12831217

  •  06-07-2021
  •  | 
  •  

문제

Possible Duplicate:
Currying subtraction

I started my first haskell project that is not from a tutorial, and of course I stumble on the simplest things.

I have the following code:

moveUp y = modifyMVar_ y $ return . (+1)
moveDn y = modifyMVar_ y $ return . (-1)

It took me some time to understand why my code wouldn't compile: I had used (-1) which is seen as negative one. Bracketting the minus doesn't help as it prefixes it and makes 1 its first parameter.

In short, what is the point free version of this?

dec :: Num a => a -> a
dec x = x - 1
도움이 되었습니까?

해결책

I believe you want the conveniently-named subtract function, which exists for exactly the reason you've discovered:

subtract :: Num a => a -> a -> a

the same as flip (-).

Because - is treated specially in the Haskell grammar, (- e) is not a section, but an application of prefix negation. However, (subtract exp) is equivalent to the disallowed section.

If you wanted to write it pointfree without using a function like subtract, you could use flip (-), as the Prelude documentation mentions. But that's... kinda ugly.

다른 팁

If the above-mentioned subtract is too verbose, you could try something like (+ (-1)) or (-1 +).

You can use the subtract function (which is in the Standard Prelude).

moveDn y = modifyMVar_ y $ return . (subtract 1)

You can also use flip to reorder the parameters that - takes.

moveDn y = modifyMVar_ y $ return . (flip (-) 1)
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top