Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Type-safe fixity for builtins #10

Open
cimbul opened this issue Jun 1, 2019 · 0 comments
Open

Type-safe fixity for builtins #10

cimbul opened this issue Jun 1, 2019 · 0 comments
Labels
quality Code quality, tests

Comments

@cimbul
Copy link
Owner

cimbul commented Jun 1, 2019

The map of builtins uses an (identifier, fixity) pair as the key, but the builtin functions themselves all take a list of terms, and there is no static guarantee that we are passing the right number of terms. That forces us to define a lot of unnecessary fall-through cases. See if we can make this type-safe with a heterogenous map implementation or some kind of dependent type mechanism.

-- | A map from a functor\/arity pair to a function that computes a builtin
-- operation
builtins :: (MonadIO m, Functor m) => Map (Identifier, Int) (Predicate m)
builtins = M.fromList [
(("fail", 0), bfail),
(("true", 0), btrue),
(("not", 1), bnot),
(("consult", 1), bconsult),
(("compile", 1), bcompile),
(("op", 3), boperator)
]

@cimbul cimbul added the quality Code quality, tests label Jun 1, 2019
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
quality Code quality, tests
Projects
None yet
Development

No branches or pull requests

1 participant