いけがみです。 

外してるかもしれませんが、Vector を用意したかったら Array ではどうですか。

import Data.Array

type Vector a = Array Int a

listVec :: Int -> [a] -> Vector a
listVec size xs
  | not (size == length xs) = error "invalid size"
  | otherwise = listArray (0, size - 1) xs

vx :: Vector a -> a
vx a = a ! 0

{- vy, vz, vw も同様 -}

data record が重なったときは module にわけるか、
data Vector4 = Vector4 {v3 :: Vector3, vw :: Double}
とするか、(この場合例は悪いですけど)、 class を使うか
などいろいろ考えちゃいますね。

--
ML: haskell-jp / quickml.com
使い方: http://QuickML.com/