Search code examples
haskell-platformhaskellhaskelldb

How do I create an operator in Haskell?


Making a ternary logic table, and I would like to make my own function for an operator that I'll call <=>.

So, for example, I want to do this, but that isn't right. what's the correct way to do this?

data Ternary = T | F | M
deriving (Eq,  Show, Ord)

<=> :: Ternary -> Ternary -> Ternary
<=> T F = F
<=> T T = T
<=> T M = M
<=> F F = T
<=> F T = F
<=> F M = M
<=> M F = M
<=> M T = M
<=> M M = T

Solution

  • Just add parentheses around your operator:

    (<=>) :: Ternary -> Ternary -> Ternary
    (<=>) T F = F
    (<=>) T T = T
    (<=>) T M = M
    (<=>) F F = T
    (<=>) F T = F
    (<=>) F M = M
    (<=>) M F = M
    (<=>) M T = M
    (<=>) M M = T
    

    This turns it from infix form to prefix form. Alternatively, you can just use infix in the definition:

    (<=>) :: Ternary -> Ternary -> Ternary
    T <=> F = F
    T <=> T = T
    T <=> M = M
    F <=> F = T
    F <=> T = F
    F <=> M = M
    M <=> F = M
    M <=> T = M
    M <=> M = T