granule
A statically-typed linear functional language with graded modal types for fine-grained program reasoning
File Explorer
Download Latest Version (.zip)- haskell.yml
- hlint.yml
- granule.code-snippets
- Benchmarks.hs
- StdError.hs
- Main.hs
- 01.gr
- cbn.gr
- cbv.gr
- coeff-gen.gr
- coeff-nat.gr
- mult.gr
- and1.gr
- and2.gr
- and3.gr
- or1.gr
- or2.gr
- or3.gr
- i.gr
- k.gr
- s.gr
- either-bang.gr
- either-gen.gr
- either-nat.gr
- pair-bang.gr
- pair-gen.gr
- pair-nat.gr
- func-bang.gr
- func-gen.gr
- func-nat.gr
- vec10.gr
- vec15.gr
- vec20.gr
- vec5.gr
- eitherInterval.gr
- flob.gr
- fromMaybe.gr
- security.gr
- share.gr
- Compiler.hs
- Main.hs
- Error.hs
- HSCodegen.hs
- Util.hs
- CHANGELOG.md
- README.md
- gr-blue.png
- style.css
- template.html
- ablist.gr
- ablist.gr.output
- Cake.gr
- Capabilities.gr
- Capabilities.gr.output
- cata.gr
- choice.gr.md
- Church.gr
- coeffect-poly.gr
- CombinatoryLogic.gr
- cost.gr
- Database.gr
- Database.gr.output
- DependentSafeHead.gr
- Door.gr
- effects_nondet.gr
- effects_nondet.gr.output
- effects_state.gr
- effects_state.gr.output
- existential.gr
- Files.gr
- Files.gr.output
- FilesBoxed.gr
- FilesBoxed.gr.output
- filterSequence.gr
- filterSequence.gr.output
- Fold.gr
- Fold.gr.output
- Ftree.gr
- further-examples.gr
- further-examples.gr.md
- graded-base.gr
- intro.gr
- intro.gr.md
- IO.gr
- lambda-gadt.gr
- LeftPadShort.gr
- LeftPadTutorial.gr
- LeftPadTutorial.gr.output
- listToVec.gr
- nonDeterminism.gr
- nonDeterminism.gr.output
- NonEmpty.gr
- NonEmpty.gr.output
- nonlinear.gr
- ooz.gr
- pad_left.gr
- pad_left.gr.output
- parallelWithMutation.gr
- parallelWithMutation.gr.output
- rankN.gr
- rankN.gr.output
- Secure.gr
- Secure.gr.output
- SecurityAlt.gr
- sensitivity.gr
- sensitivity.gr.output
- Sessions.gr
- Sessions.gr.output
- set.gr
- simple-clone.gr
- State.gr
- stream.gr
- stream.gr.output
- uniqueness.gr
- Foldable.hs
- Compile.hs
- SFrac.hs
- SNatX.hs
- SymbolicGrades.hs
- SynTree.hs
- Checker.hs
- Coeffects.hs
- CoeffectsTypeConverter.hs
- Constraints.hs
- DataTypes.hs
- Effects.hs
- Exhaustivity.hs
- Flatten.hs
- Ghost.hs
- Kinding.hs
- LaTeX.hs
- Monad.hs
- NameClash.hs
- Normalise.hs
- Patterns.hs
- Predicates.hs
- Primitives.hs
- Simplifier.hs
- Substitution.hs
- SubstitutionContexts.hs
- TypeAliases.hs
- Types.hs
- Variables.hs
- Ascii.hs
- Latex.hs
- Markdown.hs
- Annotated.hs
- Def.hs
- Expr.hs
- FirstParameter.hs
- Helpers.hs
- Identifiers.hs
- Lexer.x
- Parser.y
- Pattern.hs
- Preprocessor.hs
- Pretty.hs
- SecondParameter.hs
- Span.hs
- Type.hs
- Builders.hs
- Common.hs
- Contexts.hs
- DebugTree.hs
- Deriving.hs
- LinearHaskell.hs
- Monad.hs
- Refactor.hs
- RewriteHoles.hs
- Splitting.hs
- Synth.hs
- SynthLinearBase.hs
- Context.hs
- Utils.hs
- Reprinter.hs
- resourceAllocator.gr
- resourceAllocator.gr.output
- typeConstraintSessions.gr
- typeConstraintSessions.gr.output
- multiRefinement.gr
- multiRefinement.gr.output
- predicateFalseInDef.gr
- predicateFalseInDef.gr.output
- predicateFalseInUse.gr
- predicateFalseInUse.gr.output
- drop.gr
- drop.gr.output
- badCaseUnify.gr
- badCaseUnify.gr.output
- effApproxBad.gr
- effApproxBad.gr.output
- letdiaLinearity.gr
- letdiaLinearity.gr.output
- noTopLevelApprox.gr
- noTopLevelApprox.gr.output
- flattenByLet.gr
- flattenByLet.gr.output
- flattenNat.gr
- flattenNat.gr.output
- flattenSec.gr
- flattenSec.gr.output
- approximation.gr
- approximation.gr.output
- approximation2.gr
- approximation2.gr.output
- badLinearityNestedCase.gr
- badLinearityNestedCase.gr.output
- cartesianCase.gr
- cartesianCase.gr.output
- caseDischargeStyle.gr
- caseDischargeStyle.gr.output
- caseLocalConstraints.gr
- caseLocalConstraints.gr.output
- coeffectKindVars.gr
- coeffectKindVars.gr.output
- disallowZeroBoundFromUnifyingPatterns.gr
- disallowZeroBoundFromUnifyingPatterns.gr.output
- errorExample.gr
- errorExample.gr.output
- exactNat.gr
- exactNat.gr.output
- fact-inf.gr
- fact-inf.gr.output
- fixCounterExample.gr
- fixCounterExample.gr.output
- flat.gr
- flat.gr.output
- gex0.gr
- gex0.gr.output
- impossibilityCheck.gr
- impossibilityCheck.gr.output
- intervalApprox.gr
- intervalApprox.gr.output
- intervalChoice.gr
- intervalChoice.gr.output
- intervalChoiceAlt.gr
- intervalChoiceAlt.gr.output
- intervalChoiceAlt2.gr
- intervalChoiceAlt2.gr.output
- intervals.gr
- intervals.gr.output
- kind-mismatch.gr
- kind-mismatch.gr.output
- lambdaApprox.gr
- lambdaApprox.gr.output
- localBinding.gr
- localBinding.gr.output
- noConsumption.gr
- noConsumption.gr.output
- patternCoeffect.gr
- patternCoeffect.gr.output
- polarity.gr
- polarity.gr.output
- polarityHO.gr
- polarityHO.gr.output
- polyCoeffectTypeUnification.gr
- polyCoeffectTypeUnification.gr.output
- polyo.gr
- polyo.gr.output
- polySemiring.gr
- polySemiring.gr.output
- polyShaped.gr
- polyShaped.gr.output
- promotionConsumptionPat.gr
- promotionConsumptionPat.gr.output
- semiringsDontHaveCommutativeMult.gr
- semiringsDontHaveCommutativeMult.gr.output
- sets-ordering.gr
- sets-ordering.gr.output
- twoBox.gr
- twoBox.gr.output
- universal.gr
- universal.gr.output
- wild.gr
- wild.gr.output
- zero-pattern-consumption.gr
- zero-pattern-consumption.gr.output
- hole0.gr
- hole0.gr.output
- hole1.gr
- hole1.gr.output
- hole2.gr
- hole2.gr.output
- pushManyMany.gr
- pushManyMany.gr.output
- pushManyOne.gr
- pushManyOne.gr.output
- pushManyZero.gr
- pushManyZero.gr.output
- pushOneMany.gr
- pushOneMany.gr.output
- pushOneZero.gr
- pushOneZero.gr.output
- pushPair.gr
- pushPair.gr.output
- pushPolyLNL.gr
- pushPolyLNL.gr.output
- pushZeroMany.gr
- pushZeroMany.gr.output
- pushZeroOne.gr
- pushZeroOne.gr.output
- pushZeroZero.gr
- pushZeroZero.gr.output
- swapBad.gr
- swapBad.gr.output
- badIndexingMatch.gr
- badIndexingMatch.gr.output
- badRecursiveArgument.gr
- badRecursiveArgument.gr.output
- caseOnIndexed.gr
- caseOnIndexed.gr.output
- dataConstrPred.gr
- dataConstrPred.gr.output
- everyOtherBroken.gr
- everyOtherBroken.gr.output
- everyOtherBroken2.gr
- everyOtherBroken2.gr.output
- expr.gr
- expr.gr.output
- headAlt.gr
- headAlt.gr.output
- headAlt2.gr
- headAlt2.gr.output
- impossibility.gr
- impossibility.gr.output
- impossible-pattern-match.gr
- impossible-pattern-match.gr.output
- impossibleMonomorph.gr
- impossibleMonomorph.gr.output
- impossiblePat.gr
- impossiblePat.gr.output
- occurs.gr
- occurs.gr.output
- bogus-import.gr
- bogus-import.gr.output
- adt.gr
- adt.gr.output
- badExistential.gr
- badExistential.gr.output
- badExistential2.gr
- badExistential2.gr.output
- badKind.gr
- badKind.gr.output
- badPoly.gr
- badPoly.gr.output
- badPoly2.gr
- badPoly2.gr.output
- badPoly3.gr
- badPoly3.gr.output
- contravariance.gr
- contravariance.gr.output
- CrossDefPolymorphism.gr
- CrossDefPolymorphism.gr.output
- implicitKind.gr
- implicitKind.gr.output
- patternArity.gr
- patternArity.gr.output
- poly.gr
- poly.gr.output
- polyCurry.gr
- polyCurry.gr.output
- polyGradeBad.gr
- polyGradeBad.gr.output
- polymorph.gr
- polymorph.gr.output
- ty-var-clashes.gr
- ty-var-clashes.gr.output
- unknownTyVar.gr
- unknownTyVar.gr.output
- leak.gr
- leak.gr.output
- leakSec.gr
- leakSec.gr.output
- level_neg1.gr
- level_neg1.gr.output
- level_neg2.gr
- level_neg2.gr.output
- level_neg3.gr
- level_neg3.gr.output
- level_neg4.gr
- level_neg4.gr.output
- level_neg5.gr
- level_neg5.gr.output
- level_neg6.gr
- level_neg6.gr.output
- level_neg7.gr
- level_neg7.gr.output
- levelApprox.gr
- levelApprox.gr.output
- levelContractionWrongSpec.gr
- levelContractionWrongSpec.gr.output
- nonInterfSec.gr
- nonInterfSec.gr.output
- security-and-linearity.gr
- security-and-linearity.gr.output
- security.gr
- security.gr.output
- forall.gr
- forall.gr.output
- pattern.gr
- pattern.gr.output
- bool.gr
- bool.gr.output
- cakeBad.gr
- cakeBad.gr.output
- comments.gr
- comments.gr.output
- different-number-of-args-in-equations.gr
- different-number-of-args-in-equations.gr.output
- if0pair.gr
- if0pair.gr.output
- name-clash-data-constr.gr
- name-clash-data-constr.gr.output
- name-clash-type-def.gr
- name-clash-type-def.gr.output
- name-clash.gr
- name-clash.gr.output
- nestedWildLinearAbs.gr
- nestedWildLinearAbs.gr.output
- nonLinearCase.gr
- nonLinearCase.gr.output
- opDivInt.gr
- opDivInt.gr.output
- set.gr
- set.gr.output
- signature-equation-name-mismatch.gr
- signature-equation-name-mismatch.gr.output
- two-errors.gr
- two-errors.gr.output
- tyConClash.gr
- tyConClash.gr.output
- unbound.gr
- unbound.gr.output
- unknownTyCon.gr
- unknownTyCon.gr.output
- useFollowedByCase.gr
- useFollowedByCase.gr.output
- wild.gr
- wild.gr.output
- wild2.gr
- wild2.gr.output
- wild3.gr
- wild3.gr.output
- append.gr
- append.gr.output
- first-arg.gr
- first-arg.gr.output
- graded.gr
- graded.gr.output
- head.gr
- head.gr.output
- lambda.gr
- lambda.gr.output
- lpattern.gr
- lpattern.gr.output
- named.gr
- named.gr.output
- nested.gr
- nested.gr.output
- odd-even.gr
- odd-even.gr.output
- pair.gr
- pair.gr.output
- second-arg.gr
- second-arg.gr.output
- specific-grading.gr
- specific-grading.gr.output
- zip.gr
- zip.gr.output
- badClone.gr
- badClone.gr.output
- cloneNonCloneable.gr
- cloneNonCloneable.gr.output
- uniqueFunction.gr
- uniqueFunction.gr.output
- uniqueProduct.gr
- uniqueProduct.gr.output
- README
- dual-involution.gr
- parallel.gr
- parallel.gr.output
- session.gr
- withLambda.gr
- copyShape.gr
- copyShape.gr.output
- copyShapeList.gr
- copyShapeList.gr.output
- drop.gr
- drop.gr.output
- pullEither.gr
- pullEither.gr.output
- pullPair.gr
- pullPair.gr.output
- pushEither.gr
- pushEither.gr.output
- pushEitherGen.gr
- pushInstance.gr
- pushList.gr
- pushPair.gr
- pushUnit.gr
- pushVec.gr
- pushVec.gr.output
- effects_state.gr
- effects_state.gr.output
- effApprox.gr
- simple-existential.gr
- cbn.gr
- cbn.gr.output
- extensions.gr
- cartesian-semiring.gr
- approximation.gr
- approximationInLet.gr
- box.gr
- caseGraded.gr
- caseGraded.gr.output
- const.gr
- const.gr.output
- cproduct.gr
- cproduct.gr.output
- exact.gr
- exact.gr.output
- example.gr
- example.gr.output
- extnat.gr
- generalFixExt.gr
- gex0.gr
- gex0.gr.output
- gex1.gr
- gex1.gr.output
- headlist.gr
- if0.gr
- intervalApprox.gr
- intervalChoice.gr
- intervals.gr
- lambdaApprox.gr
- list.gr
- list.gr.output
- maybe.gr
- maybe.gr.output
- maybePair.gr
- meet-simple.gr
- pair.gr
- pair.gr.output
- patterns.gr
- polyCoeffComp.gr
- polyCoeffComp.gr.output
- resolutionIntervalInf.gr
- reuse-bounds.gr
- reuse-bounds.gr.output
- scaleSimple.gr
- sensitivity.gr
- sensitivity.gr.output
- sets-ordering.gr
- sets.gr
- srepls.gr
- adts.gr
- case.gr
- gradedBase1.gr
- gradedBase2.gr
- gradedBaseADT.gr
- lnl.gr
- nestedLambda.gr
- nullaryConstructor.gr
- pushOneOne.gr
- pushOneOne.gr.output
- swap.gr
- swap.gr.output
- unaryConstructor.gr
- big.gr
- bind-ty-var-in-pat.gr
- bind-ty-var-in-pat.gr.output
- breadth-first.gr
- dataConstrPred.gr
- empty-data-decl.gr
- expr.gr
- expr.gr.output
- expr2.gr
- fewerAnnotations.gr
- fewerAnnotations.gr.output
- flattenHeterogeneousIntervals.gr
- gadt-balanced.gr
- gadt.gr
- gadtExample.gr
- headAlt.gr
- indexedMatch.gr
- infer-kinds.gr
- nested-indexed.gr
- predicates.gr
- PromoteData.gr
- range.gr
- range.gr.output
- replicate.gr
- replicate.gr.output
- tyCase-Func.gr
- tyCase.gr
- Test.gr
- contravariance.gr
- either.gr
- fix.gr
- implicitKind2.gr
- isSome.gr
- poly.gr
- poly.gr.output
- polyGradeGood.gr
- polymorph.gr
- polyPoly.gr
- polySimple.gr
- product.gr
- scopedVariables.gr
- ylppa.gr
- ylppa.gr.output
- functor.gr
- functor.gr.output
- rankN.gr
- rankN.gr.output
- absorbLevels.gr
- flattenSec.gr
- level_pos0.gr
- level_pos1.gr
- level_pos2.gr
- level_pos3.gr
- level_pos4.gr
- level_pos5.gr
- levelApprox.gr
- nonInterfSec.gr
- privatise.gr
- bool.gr
- bool.gr.output
- case.gr
- case.gr.output
- case2.gr
- case2.gr.output
- char.gr
- char.gr.output
- charcase.gr
- charcase.gr.output
- charmatch.gr
- charmatch.gr.output
- charmatchnl.gr
- charmatchnl.gr.output
- float.gr
- float.gr.output
- hoeval.gr
- hoeval.gr.output
- infix.gr
- infix.gr.output
- irrefutable.gr
- monoshaped.gr
- peano.gr
- simple1.gr
- simple1.gr.output
- simple2.gr
- simple2.gr.output
- simple3.gr
- simple3.gr.output
- simple4.gr
- simple4.gr.output
- simple5.gr
- simple5.gr.output
- simple6.gr
- simple6.gr.output
- simple7.gr
- simple7.gr.output
- simple8.gr
- simple8.gr.output
- string.gr
- string.gr.output
- ylppa.gr
- ylppa.gr.output
- arrayDoubleDelete.gr
- arrayDoubleDelete.gr.output
- cloneLaw.gr
- copyUniqueArray.gr
- copyUniqueArray.gr.output
- share.gr
- simpleClone.gr
- simpleClone.gr.output
- append-nested.gr
- append-nested.gr.output
- append.gr
- append.gr.output
- head.gr
- head.gr.output
- import.gr
- import.gr.output
- k.gr
- k.gr.output
- lpattern.gr
- lpattern.gr.output
- multi-boxes.gr
- multi-boxes.gr.output
- named.gr
- named.gr.output
- nested.gr
- nested.gr.output
- pair.gr
- pair.gr.output
- rewrite-pair.gr
- rewrite-pair.gr.output
- split-in-box.gr
- split-in-box.gr.output
- sub-split.gr
- sub-split.gr.output
- adt-graded-param.gr
- adt-graded-param.gr.output
- adt-graded.gr
- adt-graded.gr.output
- adt-multiconstructors-graded.gr
- adt-multiconstructors-graded.gr.output
- adt-multiconstructors-multiparam-graded.gr
- adt-multiconstructors-multiparam-graded.gr.output
- adt-multiconstructors-multiparam.gr
- adt-multiconstructors-multiparam.gr.output
- adt-multiconstructors.gr
- adt-multiconstructors.gr.output
- adt-multiparam-graded.gr
- adt-multiparam-graded.gr.output
- adt-multiparam.gr
- adt-multiparam.gr.output
- nested-adt-graded-exact.gr
- nested-adt-graded-exact.gr.output
- nested-adt-graded1.gr
- nested-adt-graded1.gr.output
- nested-adt-graded2.gr
- nested-adt-graded2.gr.output
- nested-adt-graded3.gr
- nested-adt-graded3.gr.output
- nested-adt1.gr
- nested-adt1.gr.output
- nested-adt2.gr
- nested-adt2.gr.output
- nested-adt3.gr
- nested-adt3.gr.output
- quad.gr
- quad.gr.output
- quad2.gr
- quad2.gr.output
- quad3.gr
- quad3.gr.output
- quad4.gr
- quad4.gr.output
- quad5.gr
- quad5.gr.output
- and.gr
- and.gr.output
- boolCopy.gr
- boolCopy.gr.output
- impl.gr
- impl.gr.output
- neg.gr
- neg.gr.output
- or.gr
- or.gr.output
- toBoolPair.gr
- toBoolPair.gr.output
- toBoolPair2.gr
- toBoolPair2.gr.output
- xor.gr
- xor.gr.output
- append.gr
- append.gr.output
- bind.gr
- bind.gr.output
- concat.gr
- concat.gr.output
- drop.gr
- drop.gr.output
- flatten.gr
- flatten.gr.output
- head.gr
- head.gr.output
- inc.gr
- inc.gr.output
- last.gr
- last.gr.output
- length.gr
- length.gr.output
- map.gr
- map.gr.output
- nil.gr
- nil.gr.output
- replicate10.gr
- replicate10.gr.output
- replicate5.gr
- replicate5.gr.output
- replicateN.gr
- replicateN.gr.output
- return.gr
- return.gr.output
- snoc.gr
- snoc.gr.output
- stutter.gr
- stutter.gr.output
- sum.gr
- sum.gr.output
- tail.gr
- tail.gr.output
- bind.gr
- bind.gr.output
- fromMaybe.gr
- fromMaybe.gr.output
- isJust.gr
- isJust.gr.output
- isNothing.gr
- isNothing.gr.output
- map.gr
- map.gr.output
- maybePair.gr
- maybePair.gr.output
- mplus.gr
- mplus.gr.output
- safeHead.gr
- safeHead.gr.output
- toJust.gr
- toJust.gr.output
- appPair.gr
- appPair.gr.output
- compose.gr
- compose.gr.output
- copy.gr
- copy.gr.output
- either.gr
- either.gr.output
- func-nat.gr
- func-nat.gr.output
- push-fun-gen.gr
- push-fun-gen.gr.output
- share.gr
- share.gr.output
- SKI.gr
- SKI.gr.output
- withConstraints.gr
- withConstraints.gr.output
- isEven.gr
- isEven.gr.output
- pred.gr
- pred.gr.output
- succ.gr
- succ.gr.output
- sum.gr
- sum.gr.output
- build.gr
- build.gr.output
- map.gr
- map.gr.output
- take1.gr
- take1.gr.output
- take2.gr
- take2.gr.output
- take3.gr
- take3.gr.output
- map.gr
- map.gr.output
- stutter.gr
- stutter.gr.output
- sum.gr
- sum.gr.output
- and1.gr
- and1.gr.output
- and2.gr
- and2.gr.output
- and3.gr
- and3.gr.output
- or1.gr
- or1.gr.output
- or2.gr
- or2.gr.output
- or3.gr
- or3.gr.output
- i.gr
- i.gr.output
- k.gr
- k.gr.output
- s.gr
- s.gr.output
- vec10.gr
- vec10.gr.output
- vec15.gr
- vec15.gr.output
- vec20.gr
- vec20.gr.output
- vec5.gr
- vec5.gr.output
- coeff-gen.gr
- coeff-gen.gr.output
- comp-lin.gr
- comp-lin.gr.output
- copy.gr
- copy.gr.output
- either.gr
- either.gr.output
- eitherInterval.gr
- eitherInterval.gr.output
- func-gen.gr
- func-gen.gr.output
- func-nat.gr
- func-nat.gr.output
- k.gr
- k.gr.output
- pullpair.gr
- pullpair.gr.output
- security.gr
- security.gr.output
- share.gr
- share.gr.output
- FoldableSpec.hs
- CheckerSpec.hs
- KindSpec.hs
- MonadSpec.hs
- SubstitutionsSpec.hs
- TypesSpec.hs
- ExprSpec.hs
- CommonSpec.hs
- SplittingSpec.hs
- SynthSpec.hs
- Spec.hs
- doctest.hs
- help.md
- Desugar.hs
- Eval.hs
- Doc.hs
- Interpreter.hs
- Main.hs
- Golden.hs
- Main.hs
- Queue.hs
- ReplError.hs
- ReplParser.hs
- README.md
- Runtime.hs
- Server.hs
- Main.hs
- README.md
- vim-diagnostics.gif
- vscode-diagnostics.gif
- Bool.gr
- Cake.gr
- Choice.gr
- Coffee.gr
- Either.gr
- Existential.gr
- File.gr
- Fin.gr
- Fix.gr
- Graph.gr
- List.gr
- Maybe.gr
- Nat.gr
- Parallel.gr
- Prelude.gr
- Result.gr
- Stack.gr
- State.gr
- Vec.gr
- mismatch.gr
- mismatch.gr.output
- mismatch2.gr
- mismatch2.gr.output
- noeffsig.gr
- noeffsig.gr.output
- wrongeffsig.gr
- wrongeffsig.gr.output
- letbad.gr
- letbad.gr.output
- badFile.gr
- badFile.gr.output
- exceptions.gr
- exceptions.gr.output
- file-typed.gr
- file-typed.gr.output
- file.gr
- file.gr.output
- FilesBoxed2.gr
- FilesBoxed2.gr.output
- letleftexc.gr
- letleftexc.gr.output
- letrightexc.gr
- letrightexc.gr.output
- ex1.gr
- ex2.gr
- bencharray.gr
- call-by-value-analysis.gr
- case-shadowing.gr
- Choice.gr
- coalgebra.gr
- copyarray.gr
- database2.gr
- deletearray.gr
- dubList.gr
- existential-nat.gr
- exists.gr
- fact.gr
- filter.gr
- flattenLevel.gr
- Fractional.gr
- gradedBase3.gr
- Graph.gr
- hole4.gr
- implicitLeak.gr
- integrity.gr
- intervalApproxIssue.gr
- Irrel.gr
- josef.gr
- lazy.gr
- nonInterf.gr
- oopsla-ex.gr
- order-of-equations.gr
- Parse.gr
- polarity.gr
- popZeroes.gr
- positivity.gr
- promote-data-poly.gr
- PropositionalEquality.gr
- PropositionalEqualityGen.gr
- ptrtest.gr
- README.md
- refutable.gr
- simple-ref.gr
- topLevelSecurityViolation.gr
- undefined.gr
- unification-problem.gr
- uniquearray.gr
- vecLookupSlow.gr
- .dockerignore
- .gitattributes
- .gitignore
- .hlint.yaml
- .known-issues
- adding-new-graded-modalities.md
- cabal.project
- cabal.project.freeze
- CHANGELOG.md
- CODE_OF_CONDUCT.md
- CONTRIBUTING.md
- Dockerfile
- flake.lock
- flake.nix
- granule.cabal
- hie.yaml
- LICENSE
- README.md
- stack.yaml
- TESTING.md
- workingExamples.gr
# Installation Guide
1. Get the code
git clone https://github.com/granule-project/granule
Downloads the entire project code from GitHub to your computer.
cd granule
Moves into the project folder you just downloaded.
2. Docker
Easy RecommendedPrerequisites
- Git Needed to download the project code from GitHub.
- Docker Desktop Needed to build and run containers. Install it and keep it running in the background.
docker build -t granule .
Builds a runnable image based on the Dockerfile.
docker run -p 8080:80 granule
Runs the built image as an actual container.
Run docker compose ps to check the containers are Up. If the README mentions a port, open http://localhost:PORT in your browser.
// repository documentation
Was this content helpful?
(0 ratings)
