值构造函数的别名
Aliases for Value Constructors
是否可以为值构造函数定义别名?上下文是这样的:我正在编写一个程序,它将原始递归函数实现为图灵机。为此,我正在使用一元整数编码。我的图灵机类型定义如下:
-- definition of a Turing machine
data TuringMachine a = TuringMachine
State -- q0
(Set State) -- F
(Set State) -- Q
(Set (Symbol a)) -- Gamma
(Set (Symbol a)) -- Sigma
(Map (State, Symbol a) (State, Symbol a, Instruction)) -- delta
deriving (Show)
我的符号类型定义如下:
data Symbol a = Symbol a | Blank | Delim | Final | One deriving (Eq, Ord)
为了方便,我有One
,所以我不需要到处写Symbol 1
。但这有点不整洁。我想在 Symbol
类型之外定义一个别名,比如
alias One = Symbol 1
和
alias Zero = Blank
这样的事情可能吗?
{-# Language PatternSynonyms #-}
pattern Zero :: Symbol a
pattern Zero = Blank
pattern One :: (Eq a, Num a) => Symbol a
pattern One = Symbol 1
有效(双向模式同义词)
是否可以为值构造函数定义别名?上下文是这样的:我正在编写一个程序,它将原始递归函数实现为图灵机。为此,我正在使用一元整数编码。我的图灵机类型定义如下:
-- definition of a Turing machine
data TuringMachine a = TuringMachine
State -- q0
(Set State) -- F
(Set State) -- Q
(Set (Symbol a)) -- Gamma
(Set (Symbol a)) -- Sigma
(Map (State, Symbol a) (State, Symbol a, Instruction)) -- delta
deriving (Show)
我的符号类型定义如下:
data Symbol a = Symbol a | Blank | Delim | Final | One deriving (Eq, Ord)
为了方便,我有One
,所以我不需要到处写Symbol 1
。但这有点不整洁。我想在 Symbol
类型之外定义一个别名,比如
alias One = Symbol 1
和
alias Zero = Blank
这样的事情可能吗?
{-# Language PatternSynonyms #-}
pattern Zero :: Symbol a
pattern Zero = Blank
pattern One :: (Eq a, Num a) => Symbol a
pattern One = Symbol 1
有效(双向模式同义词)