Starting to refactor purjolok WIP
[SonOfLokstallBot.git] / common.php
index a32339d..e5424ae 100644 (file)
@@ -66,6 +66,19 @@ function formatDate($date) {
     return $date->format(DATE_FORMAT);
 }
 
+function ssort($comparitor) {
+    return function($array) use ($comparitor) {
+        uasort($array, uncurry($comparitor));
+        return $array;
+    };
+}
+
+function uncurry($f) {
+    return function($a, $b) use ($f) {
+        return $f($a)($b);
+    };
+}
+
 const sendToGroupChat = 'sendToGroupChat';
 function sendToGroupChat(string $message) {
     return getTelegram()->sendMessage(['chat_id' => CHAT_ID, 'text' => $message]);
@@ -86,6 +99,24 @@ function messageNeedsReminder($message) {
     return $message['due']->diff(new DateTimeImmutable)->d == REMIND_THRESHOLD;
 }
 
+const unlines = 'unlines';
+function unlines($lines) {
+    return implode("\n", $lines);
+}
+
+function field($field) {
+    return function($array) use ($field) {
+        return $array[$field];
+    };
+}
+
+const ⬄ = '⬄';
+function ⬄($a) {
+    return function($b) use ($a) {
+        return $a <=> $b;
+    };
+}
+
 
 function ∘(...$fs) {
     return function($arg) use ($fs) {
@@ -101,12 +132,42 @@ function map($callable) {
     };
 }
 
+function aaray_column($column) {
+    return function($array) use ($column) {
+        return array_column($array, $column);
+    };
+}
+
+function aaray_slice($start) {
+    return function($length) use ($start) {
+        return function($array) use ($length, $start) {
+            return array_slice($array, $start, $length);
+        };
+    };
+}
+
 function filter($callable) {
     return function($list) use ($callable) {
         return array_filter($list, $callable);
     };
 }
 
+function f∘(callable $f) {
+    return function(callable $g) use ($f) {
+        return function($arg) use($g, $f) {
+            return $f($g($arg));
+        };
+    };
+}
+
+function ∘f(callable $f) {
+    return function(callable $g) use ($f) {
+        return function($arg) use($g, $f) {
+            return $g($f($arg));
+        };
+    };
+}
+
 function ∪($a, $b) {
     return array_merge($a, $b);
 }