diff options
| author | Mirek Kratochvil <exa.exa@gmail.com> | 2022-11-12 17:47:51 +0100 |
|---|---|---|
| committer | Mirek Kratochvil <exa.exa@gmail.com> | 2022-11-12 17:47:51 +0100 |
| commit | b9633a33182f5b381e912366273709e59f469bb9 (patch) | |
| tree | 0b7eb7f1e67792253cfaf9caee3a92570ab60407 /app/Operators.hs | |
| parent | fe6666d204c0728b4556574ddc184bc46013b193 (diff) | |
| download | prlg-b9633a33182f5b381e912366273709e59f469bb9.tar.gz prlg-b9633a33182f5b381e912366273709e59f469bb9.tar.bz2 | |
reorg.
Diffstat (limited to 'app/Operators.hs')
| -rw-r--r-- | app/Operators.hs | 42 |
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)) |
