nix -L develop --command cabal repl $(CABAL_REPL_FLAGS)
nix-shell:
nix -L develop
+
+.hlint.yaml: $(shell find src -name '*.hs' -not -name 'HLint.hs')
+ sed -i -e '/^# BEGIN: generated hints/,/^# END: generated hints/d' $@
+ echo >>$@ '# BEGIN: generated hints'
+ hlint --find . | grep -- '- fixity:' | sort -u >>$@
+ echo >>$@ '# END: generated hints'
+
+lint: .hlint.yaml
+ if hlint --quiet --report=hlint.html -XNoCPP $(HLINT_FLAGS) .; \
+ then rm -f hlint.html; \
+ else sensible-browser ./hlint.html & fi
hs.hs-speedscope
hs.ormolu
hs.profiteur
+ pkgs.git-chglog
+ pkgs.reuse
#hs.threadscope
#hs.ghc-events-analyze
#hs.haskell-language-server
"nodes": {
"flake-utils": {
"locked": {
- "lastModified": 1623875721,
- "narHash": "sha256-A8BU7bjS5GirpAUv4QA+QnJ4CceLHkcXdRp4xITDB0s=",
+ "lastModified": 1631561581,
+ "narHash": "sha256-3VQMV5zvxaVLvqqUrNz3iJelLw30mIVSfZmAaauM3dA=",
"owner": "numtide",
"repo": "flake-utils",
- "rev": "f7e004a55b120c02ecb6219596820fcd32ca8772",
- "type": "github"
- },
- "original": {
- "owner": "numtide",
- "repo": "flake-utils",
- "type": "github"
- }
- },
- "flake-utils_2": {
- "locked": {
- "lastModified": 1623875721,
- "narHash": "sha256-A8BU7bjS5GirpAUv4QA+QnJ4CceLHkcXdRp4xITDB0s=",
- "owner": "numtide",
- "repo": "flake-utils",
- "rev": "f7e004a55b120c02ecb6219596820fcd32ca8772",
+ "rev": "7e5bf3925f6fbdfaf50a2a7ca0be2879c4261d19",
"type": "github"
},
"original": {
},
"nixpkgs": {
"locked": {
- "narHash": "sha256-r3EoB5BEXlDDDm6zZ571l3GQQTV+ENxis3QQF33WzrQ=",
- "path": "/nix/store/95j1q84ajdn4ry10rywngn2jhasjjzlz-nixpkgs-patched",
+ "narHash": "sha256-OwFkUPtQmg74pta7j4kLpj1yrRZCtb9X4qJY8PAyvgw=",
+ "path": "/nix/store/vi0l5zfy1saqjcs9yipdgfgv8xli1f3f-nixpkgs-patched",
"type": "path"
},
"original": {
},
"symantic-base": {
"inputs": {
- "flake-utils": "flake-utils_2",
+ "flake-utils": [
+ "flake-utils"
+ ],
"nixpkgs": [
"nixpkgs"
]
},
"locked": {
- "lastModified": 1630669709,
- "narHash": "sha256-OoivM9+ToU99+5BJs2IssUwpW5QmVtECLm7QN4pL63k=",
+ "lastModified": 1633651466,
+ "narHash": "sha256-vdplmNo0BIChVJtxXPH3oob6mR4C1zxpOlywORf03OY=",
"ref": "main",
- "rev": "5e52e1ec42d515bc93187c9eeb3603a907214c69",
- "revCount": 22,
+ "rev": "976663dccdd6807c501c35f9040325500da35e31",
+ "revCount": 45,
"type": "git",
"url": "https://git.code.sourcephile.fr/~julm/symantic-base"
},
inputs.flake-utils.url = "github:numtide/flake-utils";
inputs.symantic-base.url = "git+https://git.code.sourcephile.fr/~julm/symantic-base?ref=main";
inputs.symantic-base.inputs.nixpkgs.follows = "nixpkgs";
+inputs.symantic-base.inputs.flake-utils.follows = "flake-utils";
outputs = inputs:
inputs.flake-utils.lib.eachDefaultSystem (system: let
pkgs = inputs.nixpkgs.legacyPackages.${system};
import qualified Data.Set as Set
import qualified Data.Text as Text
+import qualified Symantic.Class as Prod
import qualified Symantic.Parser as P
-import qualified Symantic.Lang as Prod
type Parser a = P.Parser Text.Text a
module Parsers.Playground where
import Symantic.Parser
-import qualified Symantic.Lang as Prod
+import qualified Symantic.Class as Prod
boom :: CombApplicable repr => repr ()
boom =
import qualified Language.Haskell.TH.Syntax as TH
import Symantic.Derive
-import qualified Symantic.Lang as Prod
+import qualified Symantic.Class as Prod
import Symantic.Parser.Grammar.Production
-- * Type 'ReprComb'
import Symantic.Parser.Grammar.Combinators
import Symantic.Parser.Grammar.Production
-import Symantic.Parser.Grammar.ObserveSharing hiding (def)
+import Symantic.Parser.Grammar.ObserveSharing
import Symantic.Derive
+import qualified Symantic.Class as Prod
import qualified Symantic.Data as Prod
-import qualified Symantic.Lang as Prod
{-
import Data.Function (($), flip)
import qualified Language.Haskell.TH.Syntax as TH
import qualified Language.Haskell.TH.Show as TH
+import Symantic.Class
import Symantic.Data
-import Symantic.Lang
import Symantic.Derive
type Production = Product
lam1 f = Pair
(lam1 (\x -> let Pair fx _ = f (Pair x undefined) in fx))
(lam1 (\y -> let Pair _ fy = f (Pair undefined y) in fy))
- const = Pair const const
+ Pair f1 f2 .@ Pair x1 x2 = Pair (f1 .@x1) (f2 .@x2)
var = Fun.id
+instance (Callable f, Callable g) => Callable (Product f g) where
+ const = Pair const const
id = Pair id id
flip = Pair flip flip
- Pair f1 f2 .@ Pair x1 x2 = Pair (f1 .@x1) (f2 .@x2)
(.) = Pair (.) (.)
($) = Pair ($) ($)
instance (Num (f a), Num (g a)) => Num (Product f g a) where
lam f = Identity (runIdentity Fun.. f Fun.. Identity)
lam1 = lam
var = Fun.id
+instance Callable Identity where
const = Identity Fun.const
flip = Identity Fun.flip
id = Identity Fun.id
lam f = [|| \x -> $$(f [||x||]) ||]
lam1 = lam
var = Fun.id
+instance Callable TH.CodeQ where
id = [|| \x -> x ||]
const = [|| Fun.const ||]
flip = [|| \f x y -> f y x ||]
import Symantic.Parser.Machine.Input
import Symantic.Parser.Machine.Instructions
import qualified Language.Haskell.TH.HideName as TH
-import qualified Symantic.Lang as Prod
+import qualified Symantic.Class as Prod
import qualified Symantic.Optimize as Prod
--import Debug.Trace
import Symantic.Parser.Grammar
import Symantic.Parser.Machine.Input
-import qualified Symantic.Lang as Prod
+import qualified Symantic.Class as Prod
import qualified Symantic.Data as Sym
-- * Type 'Splice'
import qualified Data.Traversable as Traversable
import qualified Language.Haskell.TH as TH
import qualified Language.Haskell.TH.Syntax as TH
-import qualified Symantic.Lang as Prod
+import qualified Symantic.Class as Prod
import Symantic.Derive
import Symantic.Parser.Grammar