类型同义词的自动类型构造函数

Mai*_*ein 3 haskell

我有一个叫做的类型Vec2F,我可以像这样使用它Vec2F 0.0 0.0.但我想制作自己的类型

type Direction = Vec2F

但后来我做不到Direction 0.0 0.0,我必须定义一个有点麻烦的新功能.

direction :: Float -> Float -> Vec2F
direction = Vec2F

我有什么替代品?

n. *_* m. 9

我有一个叫做的类型Vec2F,我可以像这样使用它Vec2F 0.0 0.0

你不能.

你实际拥有的是数据定义

data Vec2F = Vec2F Double Double
Run Code Online (Sandbox Code Playgroud)

这是Vec2f你可以在表达式中使用的第二个.这两次出现是Vec2F彼此不可见的.它们位于不同的命名空间中.一个是类型构造函数,另一个是数据构造函数.

你可以有像这样的定义

data Foo = Bar Double
data Bar = Foo Float
Run Code Online (Sandbox Code Playgroud)

语言将吞下它(与人类读者相反).

定义类型同义词时,它只会成为类型(构造函数)的同义词.它对数据构造函数一无所知.

没有办法在标准Haskell中定义数据构造函数同义词.您可能可以使用视图模式 [-XViewPatterns]来达到类似的效果.我没试过.