precedencegroup MonadicPrecedenceRight {
    associativity: right
    lowerThan: LogicalDisjunctionPrecedence
    higherThan: AssignmentPrecedence
}

precedencegroup MonadicPrecedenceLeft {
    associativity: left
    lowerThan: LogicalDisjunctionPrecedence
    higherThan: AssignmentPrecedence
}

precedencegroup ApplicativePrecedence {
    associativity: left
    higherThan: LogicalConjunctionPrecedence
    lowerThan: NilCoalescingPrecedence
}

infix operator >>- : MonadicPrecedenceLeft
infix operator -<< : MonadicPrecedenceRight

infix operator <^> : ApplicativePrecedence
infix operator <*> : ApplicativePrecedence

infix operator >>-? : MonadicPrecedenceLeft
infix operator -<<? : MonadicPrecedenceRight

precedencegroup PromiseKMonadicPrecedenceRight {
    associativity: right
    lowerThan: LogicalDisjunctionPrecedence
    higherThan: AssignmentPrecedence
}

precedencegroup PromiseKMonadicPrecedenceLeft {
    associativity: left
    lowerThan: LogicalDisjunctionPrecedence
    higherThan: AssignmentPrecedence
}

precedencegroup PromiseKApplicativePrecedence {
    associativity: left
    higherThan: LogicalConjunctionPrecedence
    lowerThan: NilCoalescingPrecedence
}

infix operator >>- : PromiseKMonadicPrecedenceLeft
infix operator -<< : PromiseKMonadicPrecedenceRight

infix operator <^> : PromiseKApplicativePrecedence
infix operator <*> : PromiseKApplicativePrecedence

infix operator >>-? : PromiseKMonadicPrecedenceLeft
infix operator -<<? : PromiseKMonadicPrecedenceRight

Add the `PromiseK` prefix to precedencegroup
Add the `PromiseK` prefix to precedencegroup
