Project Euler Problem #102 in F#: counting triangles that contain the origin
It looks OK to me. You can avoid the List.ofArray call, if you change the arguments to intToCoord and containsOrigin to arrays instead of lists:

let intToCoord [|x; y|] = { x = x; y = y }

let containsOrigin [|a; b; c|] =
    twiceTriangleArea a b c = twiceTriangleArea origin a b +
        twiceTriangleArea origin b c +
        twiceTriangleArea origin a c



let solution =
    System.IO.File.ReadLines "p102_triangles.txt"
    |&gt; Seq.map (fun line -&gt; 
        line.Split ',' |&gt; Array.map int |&gt; Array.chunkBySize 2 |&gt; Array.map intToCoord
    )
    |&gt; Seq.filter containsOrigin
    |&gt; Seq.length




Update:

You could though "rearrange" the mapping from string to a "triangle" in this way:

let toCoord [|x; y|] = { x = int x; y = int y}

let toTriangle line = (string line).Split ',' |&gt; Array.chunkBySize 2 |&gt; Array.map toCoord


And then change the main function to:

let solution =
    System.IO.File.ReadLines "p102_triangles.txt"
    |&gt; Seq.map toTriangle
    |&gt; Seq.filter containsOrigin
    |&gt; Seq.length


In this way you gain more even abstraction levels in the pipe chain in the main function.