-- | The standard equality operators, lifted to 'Exp'.
(%==), (%/=) :: Exp a -> Exp a -> Exp Bool
(%==) a b = do
    Value a <- a
    Value b <- b
    v <- mutable_ false
    eq <- newLabel
    end <- newLabel
    emit $ StrCmpS a b eq end
    label eq
    v @= true
    label end
    v
(%==), (%/=) :: Exp a -> Exp a -> Exp Bool
(%==) a b = do
    Value a <- a
    Value b <- b
    v <- mutable_ false
    eq <- newLabel
    end <- newLabel
    emit $ StrCmpS a b eq end
    label eq
    v @= true
    label end
    v
(%==) a b = do
    Value a <- a
    Value b <- b
    v <- mutable_ false
    eq <- newLabel
    end <- newLabel
    emit $ StrCmpS a b eq end
    label eq
    v @= true
    label end
    v