this post was submitted on 21 Oct 2023
22 points (92.3% liked)

Programming

17538 readers
71 users here now

Welcome to the main community in programming.dev! Feel free to post anything relating to programming here!

Cross posting is strongly encouraged in the instance. If you feel your post or another person's post makes sense in another community cross post into it.

Hope you enjoy the instance!

Rules

Rules

  • Follow the programming.dev instance rules
  • Keep content related to programming in some way
  • If you're posting long videos try to add in some form of tldr for those who don't want to watch videos

Wormhole

Follow the wormhole through a path of communities [email protected]



founded 2 years ago
MODERATORS
22
(lemmy.ml)
submitted 1 year ago* (last edited 10 months ago) by [email protected] to c/programming
 

Permanently Deleted

all 4 comments
sorted by: hot top controversial new old
[–] namingthingsiseasy 3 points 1 year ago

OCaml is a really interesting language. Wish I had more opportunities to try it out....

Anyway, you might want to check out https://discuss.ocaml.org/. They are a pretty active OCaml community and are pretty helpful for beginners and learners.

[–] [email protected] 2 points 1 year ago* (last edited 1 year ago) (1 children)

I'm not an OCaml person but I do know other functional languages. I looked into Alcotest and it looks like the function after "`Quick" has to be unit -> unit. Because OCaml has currying, and I think test_increment already returns unit, all you should have to do is add an extra parameter of type unit. I believe that would be done like this:

let test_increment (new_value, original_value) () =

Now the expression test_increment (1, 0) returns a function that must be passed a unit to run its body. That means you can change the lambdas to e.g. this:

test_case "blah" `Quick (test_increment (1, 0))

I don't know OCaml precedence rules so the enclosing parentheses here may not be necessary.

I'd also note that taking new_value and original_value as a tuple would probably be considered not idiomatic unless it makes sense for the structure of the rest of your code, especially because it limits currying like we did with the unit being able to be passed later. Partial application/currying is a big part of the flexibility of functional languages.

Edit: if you're getting into functional programming you may also consider calling increment_by_one "succ" or "successor" which is the typical terminology in functional land.