我有以下Haskell功能
fun::Vertex3 GLfloat -> Vertex3 GLfloat -> Vertex3 GLfloat fun (Vertex3 x0 y0 z0) (Vertex3 x1 y1 z1) = do sth here where p0 = (Vertex3 x0 y0 z0) p1 = (Vertex3 x1 y1 z1) p = p0 + p1
我想知道是否有一种方法可以不在
(Vertex3 x0 y0 z0) (Vertex3 x1 y1 z1)
代码中重复
我正在寻找一些东西:
fun::Vertex3 GLfloat -> Vertex3 GLfloat -> Vertex3 GLfloat fun p0 p1 = do sth here where p0 = (Vertex3 x0 y0 z0) p1 = (Vertex3 x1 y1 z1) p = p0 + p1
Willem Van O.. 6
是的,您可以使用as-pattern [AGItH'98]:
fun::Vertex3 GLfloat -> Vertex3 GLfloat -> Vertex3 GLfloat fun p0@(Vertex3 x0 y0 z0) p1@(Vertex3 x1 y1 z1) = do sth here where p = p0 + p1
在这里,我们因此具有参照上述两个参数p0
在数据构造,以及元件(x0
,y0
,z0
).
这些as-patterns可以在模式中的不同级别使用.
是的,您可以使用as-pattern [AGItH'98]:
fun::Vertex3 GLfloat -> Vertex3 GLfloat -> Vertex3 GLfloat fun p0@(Vertex3 x0 y0 z0) p1@(Vertex3 x1 y1 z1) = do sth here where p = p0 + p1
在这里,我们因此具有参照上述两个参数p0
在数据构造,以及元件(x0
,y0
,z0
).
这些as-patterns可以在模式中的不同级别使用.