Is there any way to improve (shorten) this F# code? I have a very good grasp of the syntax and features of F# as well as some of the concepts that mesh well with the language. However, I do not have enough experience writing it to feel comfortable that the way I am handling the language is appropriate. 

Ignoring the fact that I do not provide proper escaping functionality for the file format, is there any way I could write this code better? I know that this is a trivial example, but I fear that I might be making things too hard on myself with this code.

Also, is there a way that I could write this more robustly so that adding in an escape sequence for the ";" character would be easier?

module Comments

open System.IO

type Comment = { Author: string; Body: string }

let parseComment (line:string) =
    match line.Split(';') with
    | [|author; body|] -&gt; Some({Author=author; Body=body})
    | _                -&gt; None

let filterOutNone maybe = match maybe with | Some(_) -&gt; true | _ -&gt; false
let makeSome some = match some with | Some(v) -&gt; v | _ -&gt; failwith "error"

let readAllComments () = 
    File.ReadAllLines("comments.txt")
    |&gt; Array.map parseComment
    |&gt; Array.filter filterOutNone
    |&gt; Array.map makeSome
Most of your code can be replaced with a comprehension:

type Comment = { Author: string; Body: string }

let readAllComments () = 
  [|for line in System.IO.File.ReadAllLines("comments.txt") do
      match line.Split ';' with
      | [|author; body|] -&gt; yield {Author=author; Body=body}
      | _ -&gt; ()|]