úÎ!YxYNoneXÚmmsyn2CThe function that can be used instead of the 'case ... of' function Rcase var of a1 -> b1 a2 -> b2 a3 -> b3 ... an -> bn _ -> defaultValueƒIf we follow a lot of teaching materials that explain the workflow of the construction we think that the complexity of it is about O(n) for the transformation of a to b¥ here. David Feuer (david.feuer (at) gmail.com) said that 'case ... of' is already optimized in GHC. Some benchmarks show that its behaviour tends to be about of O(log n)0 complexity, the same as the proposed function Á. Nevertheless, the last one shows better performance in some situations, is rather general and can be used for another data representation. Therefore, it can be preferred in some situations. $ uses binary search algorithm and a  Vector (a, b)E as somewhat like a complicated filter or like a special sieve. The  Vector (a, b) must be sorted in ascending order here for the algorithm to be used correctly. For this you can use the following functions  and . b before  Vector (a, b), in the tuple in the type definition of the  must be a  defaultValue for 'case' above.  Vector (a, b) corresponds to , a1 -> b1 a2 -> b2 a3 -> b3 ... an -> bnmmsyn2]The function that uses special realization of the binary search to effectively transform the Vector a to Vector b instead of simply use  Rcase var of a1 -> b1 a2 -> b2 a3 -> b3 ... an -> bn _ -> defaultValueThe  Vector (a, b) must be sorted in ascending order here for the algorithm to be used correctly. For this you can use the following functions  and i. it can be used to simplify the procedure for optimizing the code for transformation of the Vector data.b after  Vector (a, b) in the type definition of the  must be a  defaultValue for 'case' above.  Vector (a, b) corresponds to , a1 -> b1 a2 -> b2 a3 -> b3 ... an -> bnmmsyn2NThe function that uses special kind of bisection to effectively transform the [a] to [b] instead of simply use  Rcase var of a1 -> b1 a2 -> b2 a3 -> b3 ... an -> bn _ -> defaultValueThe  Vector (a, b) must be sorted in ascending order here for the algorithm to be used correctly. For this you can use the following functions  and ›. The function can be used to simplify the procedure for optimizing the code for transformation of the list data or to represent the data in another way.b after  Vector (a, b) in the type definition of the  must be a  defaultValue for 'case' above.  Vector (a, b) corresponds to , a1 -> b1 a2 -> b2 a3 -> b3 ... an -> bnmmsyn2Function that sorts a list of (a, b)u tuples by the first argument and is inspired by Data.List.sort function (the last one can be used for sorting the (a, b) tuples where both the types of a and b@ have instances of the class Ord). It is inspired by the work: %https://wiki.haskell.org/Introductionmmsyn2#Function that prepares the list of (a, b) tuples representing the  Tcase var of a1 -> b1 a2 -> b2 a3 -> b3 ... an -> bn _ -> defaultValuefor usage in the  and  functions. #The resulting vector has for every a= only one element, which was the first in the list of tuples (a, b) after sorting by  function.mmsyn2$The function that is used to filter [(a, b)]8 of the corresponding values for getFstB' to obtain the  Vector (a, b) such that the b# element for the sequence of pairs (a, b) with the same a is selected by the predicate pi and is not necessarily the first one as it is for the getFstB' function and its successors by default.mmsyn2bX is a default value that can be substituted if there is no correspendence in the set of (a, b) tuples (the 1 or irrefutable pattern analogue). Vector of the (a, b)b tuples that must be sorted in ascending order for the first argument. If there are several pairs (a, b) with the same a!, the function gives a resulting b" as if there is only the first onemmsyn2@an element for which the corresponding resulting b must be foundmmsyn2 the resultmmsyn2Vector of the (a, b)A tuples that are sorted in ascending order for the first argumentmmsyn2Ta default value that can be substituted if there is no correspendence in the set of (a, b) tuples (the ! or irrefutable pattern analogue)mmsyn2=a Vector needed to be transformed accordingly to the correct (a, b) tuple pairsmmsyn2the resulting Vectormmsyn2Vector of the (a, b)E tuples that must be sorted in ascending order for the first argumentmmsyn2Ta default value that can be substituted if there is no correspendence in the set of (a, b) tuples (the ! or irrefutable pattern analogue)mmsyn2Ea list of values needed to be transformed accordingly to the correct (a, b) tuple pairsmmsyn2the resulting listmmsyn2IThe list of conditions that is then converted to the corresponding Vectormmsyn2Tthe resulting sorted Vector that can be used further in getBFst' and its successors.mmsyn2The predicate p& used to select the only one value of b in the pairs (a, b) with the same a!. ^ If there are several pairs (a, b) for the same aB that satisfies a predicate then the first one is used. For large [(a, b)] ^ it can be rather complex.mmsyn2 The list of (a, b)D sorted in the ascending order by the first element a (e. g. by the  function)mmsyn2The resulting filtered  Vector (a, b); that can be used for getFstB' and its successor functions. Example: µfilterP (\(t, w) -> (t == "1") || (w > 'f')) . sortFst $ [("1",'a'),("4a",'k'),("4a",'b'),("4a",'c'),("4a",'d'),("4a",'e'),("b7",'c'),("b7",'k')] = [("1",'a'),("4a",'k'),("b7",'k')] %mmsyn2-0.1.7.0-CjNSakl2NWx4kAdcDyvQ06CaseBigetBFst'getBFstVgetBFstsortFstsortFstVfilterPbaseGHC.Base otherwise