Determine whether path A→B→C on a plane constitutes a left or right turn
Welcome to Haskell (and Code Review). Your ADT Direction is a good approach for the result. However, top-level functions should have a type, as it will make type errors easier to read and give other users an idea how to use your function:

type Point2 = (Double, Double)

findDirection :: Point2 -&gt; Point2 -&gt; Point2 -&gt; Direction    
findDirection (x, y) (x1, y1) (x2, y2)


While isn't necessary&mdash;GHC can infer it&mdash;it can at least act as a minimal documentation.

Next, we should tackle the names. We have x, x1 and x2. Those seem arbitrary. Why don't we start with x1? The names (ax,ay), (bx,by) and (cx,cy) would be more suitable, since we're talking about the coordinates of three specific points, a, b and c:

findDirection :: Point2 -&gt; Point2 -&gt; Point2 -&gt; Direction    
findDirection (ax, ay) (bx, by) (cx, cy)


However, as vnp said, you should use the cross product. While the cross-product is only defined for three dimensions, we can simply embed your points into \$\mathbb R^3\$ and then take the Z-component of the resulting vector:

type Vector2 = (Double, Double)

-- See https://en.wikipedia.org/wiki/Cross_product#Computing_the_cross_product
cross :: Vector2 -&gt; Vector2 -&gt; Double
cross (ax, ay) (bx, by) = error "Implement this as an exercise"


With yet another function, we can then get the two vectors from our original three points:

diff :: Point2 -&gt; Point2 -&gt; Vector2
diff (ax, ay) (bx, by) = (bx - ax, by - ay)


Now we really end up with an elegant solution:

findDirection :: Point2 -&gt; Point2 -&gt; Point2 -&gt; Direction
findDirection a b c = 
    case cross (a `diff` b) (b `diff` c) `compare` 0 of
        GT -&gt; LeftTurn
        EQ -&gt; Straight
        LT -&gt; RightTurn