To Bind, or not to Bind? 

It’s easy to conflate Map and Bind. Two functions with nearly identical function signatures. The main difference is the lambda you pass in. Map transforms ‘A to ‘B whilst Bind transforms ‘A to a ‘B wrapped in an effect.

Code Snippet
let mapResult mapper result = 
    match result with
    | Ok okValue -> okValue |> mapper |> Ok
    | Error errorValue -> errorValue |> Error
let bindResult binder result =
    match result with
    | Ok okValue -> binder okValue
    | Error errorValue -> errorValue |> Error
let divideBy a b =
    if b = 0 then
        "Cannot divide by zero" |> Error
    else
        a/b |> Ok
divideBy 100 10
|> bindResult (fun number -> divideBy number 2)
|> mapResult (fun number -> number + 42)
|> fun result -> 
    match result with
    | Ok okValue -> printfn "Ok with value = %i" okValue
    | Error errorValue -> printfn "Error with value = %s" errorValue