diff --git a/dotfiles/lib/bin/knightDeltas.hs b/dotfiles/lib/bin/knightDeltas.hs new file mode 100755 index 00000000..196d53d3 --- /dev/null +++ b/dotfiles/lib/bin/knightDeltas.hs @@ -0,0 +1,22 @@ +#!/usr/bin/env run_haskell_stack.sh + +import Data.Bifunctor +import Data.Tuple + +knightDeltasSimple = + applyAll [swap] (1, 2) + >>= applyAll [first negate, second negate, bimapBoth negate] + where applyAll fns v = map ($ v) $ id:fns + bimapBoth fn = bimap fn fn + +knightDeltas = applyInStages [(1, 2)] + [ [swap] + , [bimapBoth (* 2)] + , [first negate, second negate, bimapBoth negate] + ] + where applyAll fns v = map ($ v) $ id:fns + applyAllToValues values fns = values >>= applyAll fns + applyInStages = foldl applyAllToValues + bimapBoth fn = bimap fn fn + +main = print knightDeltas