Uses fmap instead of explicit Vector3 constructor