phongShader :: (PrimMonad m) => World (Vector3 Double) -> Transform (ModelSpace (Vector3 Double)) (World (Vector3 Double)) -> m (PhongShader (PrimState m))
phongShader dir modelToWorld = do
    state <- MV.new 3
    return $ PhongShader state dir modelToWorld
phongShader :: (PrimMonad m) => World (Vector3 Double) -> Transform (ModelSpace (Vector3 Double)) (World (Vector3 Double)) -> m (PhongShader (PrimState m))
phongShader dir modelToWorld = do
    state <- MV.new 3
    return $ PhongShader state dir modelToWorld
phongShader dir modelToWorld = do
    state <- MV.new 3
    return $ PhongShader state dir modelToWorld