{"id":13803511,"url":"https://github.com/idris-industry/ikan","last_synced_at":"2025-05-13T15:33:51.217Z","repository":{"id":138169097,"uuid":"140267674","full_name":"idris-industry/ikan","owner":"idris-industry","description":"build tool and package manager for idris,in idris,with free monads","archived":false,"fork":false,"pushed_at":"2019-02-20T02:47:10.000Z","size":73,"stargazers_count":34,"open_issues_count":2,"forks_count":3,"subscribers_count":6,"default_branch":"master","last_synced_at":"2024-08-04T01:02:32.038Z","etag":null,"topics":["free-monads","idris","package-manager"],"latest_commit_sha":null,"homepage":"","language":"Idris","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/idris-industry.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null}},"created_at":"2018-07-09T10:08:34.000Z","updated_at":"2022-09-09T13:48:07.000Z","dependencies_parsed_at":"2024-01-12T13:59:31.043Z","dependency_job_id":null,"html_url":"https://github.com/idris-industry/ikan","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/idris-industry%2Fikan","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/idris-industry%2Fikan/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/idris-industry%2Fikan/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/idris-industry%2Fikan/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/idris-industry","download_url":"https://codeload.github.com/idris-industry/ikan/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":225239791,"owners_count":17442826,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["free-monads","idris","package-manager"],"created_at":"2024-08-04T01:00:34.229Z","updated_at":"2024-11-18T19:31:40.338Z","avatar_url":"https://github.com/idris-industry.png","language":"Idris","funding_links":[],"categories":["Uncategorized"],"sub_categories":["Uncategorized"],"readme":"[![Join the chat at https://gitter.im/idris-gitter/Lobby](https://badges.gitter.im/idris-gitter/Lobby.svg)](https://gitter.im/idris-gitter/Lobby?utm_source=badge\u0026utm_medium=badge\u0026utm_campaign=pr-badge\u0026utm_content=badge)\n\n\n🚧 **Ongoing project** 🚧 **Status: Prototype** 🚧\n\n\n# ikan : package manager for idris,in idris\n\nThe next generation package manager and build tool for idris,with free monads as DSL,using idris repl for scala's `sbt` like interaction, ,and possible other languages!\n\na example build file is at src/build.idr\n\nexecution of build file : src/Package/IkanExecute.idr\n\npackages will be hosted here: https://github.com/orgs/idris-packages/ , please email me if you would like to help manage the packages. Basically, the packages this org forked would be available to ikan.\n\nThe user api is mainly monadic, using free monads, which easily allows multiple kinds of analysis and interpretation.The philosophy is emacs like,that ikan just acts like a library.\n\nGeneral discuss about idris package manager is here\n\nhttps://github.com/idris-lang/Idris-dev/issues/1825\n\nhttps://github.com/idris-lang/Idris-dev/wiki/Egg-%237:-The-Idris-Package-Manager\n# Currently Implemented\n\ncreate new project with .ipkg template\n\nnew file/module\n\n# Usage \n\nclone and cd into this repo\n\n```\nidris --build ikan.ipkg\n\t\nor\n\t\nsh install.sh\n\t\n```\n\nand then move or symlink generated bin `ikan` to your path\n\n# Sources\n\n```\n├── src\n│   ├── Main.idr main entry\n│   └── Package\n│       ├── IkanAssets.idr  templates for new project ,etc\n│       ├── IkanAst.idr\n│       ├── IpkgAst.idr\n│       └── IpkgParser.idr\n\n```\n\n# Why is it named ikan\n\nkan extensions subsume all concepts in 1-dimensional category theory(by Mac Lane), and this project will use freer monads, which are closely connected to kan extensions. However, using ikan will assume no knowledge of any category theory, you just have to be familiar with do notation and functional programming.\n\n# Planned functionality\n\nany thing is put at a central place , `~/.idris-ikan` ,which keeps your project directory clean\n\nsandboxed environment for every project\n\nmultiple backends , js,jvm,etc,and library management\n\nmultiple version resolution methods, via git commit specification or automatic\n\nbuild,install to local ,clean,list all pkgs\n\ngenerate template project\n\nzsh integration\n\na website (currently everything will be put at https://github.com/idris-packages , contact me if you want to manage packages!)\n\n# The big picture \n\nThe entry `main : PkgIO ()` is just the IO () for our package manager (We may just use plain old IO () instead. However we do not do actions in IO directly, any operations would be implemented DSLs (deep embedding), which makes it convenient to do multiple kinds of interpretation, and allows a comprehensive way of viewing what happens at building.\n\nThe reason for this kind of separation is that we can perform any analysis or inspection before actually performing it. Although the theories behind free monads are frightening, its usage is quite simple, and as users you will only see a simple monadic interface.\n\nDSLs: https://www.cs.ox.ac.uk/people/jeremy.gibbons/publications/embedding-short.pdf\n\nhttp://www.cs.ox.ac.uk/jeremy.gibbons/publications/embedding.pdf\n\nSome examples of freer monadic DSL can be found at https://github.com/doofin/tensorflow-idris/blob/baea775a608c2e8e29cb0d30555499edb18c8a9e/UserApi.idr\n\n\nrepo hosting : just use git repos forked by idris-industry\n\nconvert from/to .ipkg\n\n# Dependency \n\ninstall idris-free package with freer\n\nhttps://github.com/idris-industry/idris-free (not merged yet)\n\n# Where comes this idea?\n\ngreatly influenced by scala 's `mill`(https://github.com/lihaoyi/mill) and  `sbt` ,which build files are first class.\n\nhaskell's `shake` build\n\nclojure : https://leiningen.org/\n\nBuild Systems à la Carte(Haskell shake build) :  http://delivery.acm.org/10.1145/3240000/3236774/icfp18main-p46-p.pdf?ip=13.231.121.81\u0026id=3236774\u0026acc=OA\u0026key=4D4702B0C3E38B35%2E4D4702B0C3E38B35%2E4D4702B0C3E38B35%2E6D218144511F3437\u0026__acm__=1537263121_fe5174184ffd2d85fd5c3b83994abc50\n\n# Existing idris pm\n\n- **[Elba](https://github.com/elba/elba)** - A package manager for Idris\n- **[idream](https://github.com/idream-build/idream)** - A simple build system for Idris\n- **[Idris Rules](http://idris.build)** - Idris rules for Bazel\n\n# Contribution welcomed!\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fidris-industry%2Fikan","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fidris-industry%2Fikan","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fidris-industry%2Fikan/lists"}