логики)
let format (input: string) =
match fun a b -> input.StartsWith a && input.EndsWith b with
| f when f "{" "}" -> "JSON"
| f when f "[" "]" -> "JSON"
| f when f "<" ">" -> "XML"
| _ -> "PlainText"
SharpLab
нафига усложнять? match input.First(), input.Last() with | '{', '}' -> "JSON"
let (|Between|_|) (a: string) (b: string) (x: string) = if x.StartsWith a && x.EndsWith b then Some () else None let format' = function | Between "{" "}" | Between "[" "]" -> "JSON" | Between "<" ">" -> "XML" | _ -> "PlainText"
Бери сразу fparsec
Чутка зубы об него сломал, но в целом получил удовольствие
Фпарсек это библиотека про аппликативные парсеры?
А почему принято использовать Optional, а не bool? Потому что семантика более выразительная или по другим причинам?
Optional является функтором, а bool нет
Потому что из активных шаблонов можно возвращать значения, завёрнутые в Option<'T>.
То есть не только информацию о том, сопоставилось или нет, а ещё деконструкцию/представление сделать.
Обсуждают сегодня