我想知道以下两种策略中的哪一种对于重载函数最有效(在我的示例中是函数 teX)。
使用
data
和模式匹配:data TeX = TeXt String | TeXmath String deriving (Show,Read,Eq) teX (TeXt t) = t teX (TeXmath t) = "$$" ++ t ++ "$$"
或者使用一些抽象:
class TeX t where teX :: t -> String newtype TeXt = TeXt String deriving (Show,Read,Eq) instance TeX TeXt where teX (TeXt t) = t newtype TeXmath = TeXmath String deriving (Show,Read,Eq) instance TeX TeXmath where teX (TeXmath t) = "$$" ++ t ++ "$$"
当然,第一个更容易使用,第二个更容易丰富;但我想知道一个是否会比另一个运行得更快,或者 Haskell 是否会以完全相同的方式实现它们。