diff --git a/compiler/module/src/low_level.rs b/compiler/module/src/low_level.rs index cf6db1f394..bd31c5031d 100644 --- a/compiler/module/src/low_level.rs +++ b/compiler/module/src/low_level.rs @@ -100,3 +100,100 @@ pub enum LowLevel { Hash, ExpectTrue, } + +impl LowLevel { + pub fn is_higher_order_function(&self) -> bool { + use LowLevel::*; + + match self { + StrConcat + | StrJoinWith + | StrIsEmpty + | StrStartsWith + | StrStartsWithCodePoint + | StrEndsWith + | StrSplit + | StrCountGraphemes + | StrFromInt + | StrFromUtf8 + | StrToBytes + | StrFromFloat + | ListLen + | ListGetUnsafe + | ListSet + | ListSetInPlace + | ListSingle + | ListRepeat + | ListReverse + | ListConcat + | ListContains + | ListAppend + | ListPrepend + | ListJoin + | ListRange + | DictSize + | DictEmpty + | DictInsert + | DictRemove + | DictContains + | DictGetUnsafe + | DictKeys + | DictValues + | DictUnion + | DictIntersection + | DictDifference + | SetFromList + | NumAdd + | NumAddWrap + | NumAddChecked + | NumSub + | NumSubWrap + | NumSubChecked + | NumMul + | NumMulWrap + | NumMulChecked + | NumGt + | NumGte + | NumLt + | NumLte + | NumCompare + | NumDivUnchecked + | NumRemUnchecked + | NumIsMultipleOf + | NumAbs + | NumNeg + | NumSin + | NumCos + | NumSqrtUnchecked + | NumLogUnchecked + | NumRound + | NumToFloat + | NumPow + | NumCeiling + | NumPowInt + | NumFloor + | NumIsFinite + | NumAtan + | NumAcos + | NumAsin + | NumBitwiseAnd + | NumBitwiseXor + | NumBitwiseOr + | NumShiftLeftBy + | NumShiftRightBy + | NumShiftRightZfBy + | NumIntCast + | Eq + | NotEq + | And + | Or + | Not + | Hash + | ExpectTrue => false, + + ListMap | ListMap2 | ListMap3 | ListMapWithIndex | ListKeepIf | ListWalk + | ListWalkUntil | ListWalkBackwards | ListKeepOks | ListKeepErrs | ListSortWith + | DictWalk => true, + } + } +}