使更好的Haskell功能

时间:2018-12-16 18:51:37

标签: haskell

我具有以下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

1 个答案:

答案 0 :(得分: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和数据构造函数中的元素(x0y0z0)。

这些 as-patterns 可以在模式中的不同级别使用。