Expression
```fsharp
if not <| rangeContainsPos <some range> pos then
   None
else ...
```
is duplicated 8 times, in each walking function. Can we remove this duplication? I'm not sure the following is better:
```fsharp
let inline posInRange range pos =
    if rangeContainsPos range pos then Some()
    else None

and walkSynModuleDecl(decl: SynModuleDecl) =
        maybe {
            do! posInRange decl.Range pos
            return!
                match decl with
                | SynModuleDecl.Exception(ExceptionDefn(_repr, synMembers, _defnRange), _range) -> 
                    List.tryPick walkSynMemberDefn synMembers
                | SynModuleDecl.Let(_isRecursive, bindings, _range) ->
                    List.tryPick walkBinding bindings
                | SynModuleDecl.ModuleAbbrev(_lhs, _rhs, _range) ->
                    None
                | SynModuleDecl.NamespaceFragment(fragment) ->
                    walkSynModuleOrNamespace fragment
                | SynModuleDecl.NestedModule(_componentInfo, modules, _isContinuing, _range) ->
                    List.tryPick walkSynModuleDecl modules
                | SynModuleDecl.Types(typeDefs, _range) ->
                    List.tryPick walkSynTypeDefn typeDefs
                | SynModuleDecl.DoExpr (_, expr, _) ->
                    walkExpr expr
                | SynModuleDecl.Attributes _
                | SynModuleDecl.HashDirective _
                | SynModuleDecl.Open _ -> 
                    None }
// and so on
```
Any ideas?