在Haskell中使用自定义二进制数据类型是一个坏主意吗?

Ebe*_*ley 2 haskell ghc

最近我做了一个程序,我使用了以下形式的数据类型:

data MyType = Constructor1 | Constructor2 deriving Eq
Run Code Online (Sandbox Code Playgroud)

是的,这种类型实际上与Bool我刚才命名的不同,以使我的代码更具可读性.在程序的后期,我有表格的功能

myFunc input = if input == Constructor1 then --do something
    else --do something else
Run Code Online (Sandbox Code Playgroud)

我认为这可能是一个坏主意的原因是,如果它被解释为它的方式,每次程序遇到这个分支时,它必须运行==它设置的函数MyType来获得Bool通过对于该if_then_else_功能,如果我刚刚使用Bool==功能的必要性被消除,这将加快该过程.

我应该替换所有实例的MyType实例,Bool还是ghc以某种方式优化数据类型的使用?

Dan*_*ner 8

不,不要替换它Bool; 而是用模式匹配替换你的等式检查.

myFunc Constructor1 = -- do something
myFunc Constructor2 = -- do something else
Run Code Online (Sandbox Code Playgroud)