summaryrefslogtreecommitdiff
path: root/app/Operators.hs
diff options
context:
space:
mode:
authorMirek Kratochvil <exa.exa@gmail.com>2022-11-12 17:47:51 +0100
committerMirek Kratochvil <exa.exa@gmail.com>2022-11-12 17:47:51 +0100
commitb9633a33182f5b381e912366273709e59f469bb9 (patch)
tree0b7eb7f1e67792253cfaf9caee3a92570ab60407 /app/Operators.hs
parentfe6666d204c0728b4556574ddc184bc46013b193 (diff)
downloadprlg-b9633a33182f5b381e912366273709e59f469bb9.tar.gz
prlg-b9633a33182f5b381e912366273709e59f469bb9.tar.bz2
reorg.
Diffstat (limited to 'app/Operators.hs')
-rw-r--r--app/Operators.hs42
1 files changed, 42 insertions, 0 deletions
diff --git a/app/Operators.hs b/app/Operators.hs
new file mode 100644
index 0000000..8bf7c1e
--- /dev/null
+++ b/app/Operators.hs
@@ -0,0 +1,42 @@
+module Operators where
+
+data Op =
+ Op Int Fixity
+ deriving (Show, Eq)
+
+data ArgKind
+ = X
+ | Y
+ deriving (Show, Eq)
+
+data Fixity
+ = Infix ArgKind ArgKind
+ | Prefix ArgKind
+ | Suffix ArgKind
+ deriving (Show, Eq)
+
+isPrefix (Prefix _) = True
+isPrefix _ = False
+
+numArgs :: Op -> Int
+numArgs (Op _ f) = go f
+ where
+ go (Infix _ _) = 2
+ go _ = 1
+
+type Ops = [(String, Op)]
+
+xfx, xfy, yfx, fx, fy, xf, yf :: String -> Int -> (String, Op)
+xfx o p = (o, Op p (Infix X X))
+
+xfy o p = (o, Op p (Infix X Y))
+
+yfx o p = (o, Op p (Infix Y X))
+
+fx o p = (o, Op p (Prefix X))
+
+fy o p = (o, Op p (Prefix Y))
+
+xf o p = (o, Op p (Suffix X))
+
+yf o p = (o, Op p (Suffix Y))