{"id":27341634,"url":"https://github.com/yolc-dev/yul-dsl-monorepo","last_synced_at":"2025-09-09T11:07:25.431Z","repository":{"id":166019526,"uuid":"641437123","full_name":"yolc-dev/yul-dsl-monorepo","owner":"yolc-dev","description":"The monorepo of YulDSL (a DSL for Solidity/Yul), YulDSL/Haskell (Embedding YulDSL in Haskel), and Yolc (a safe, expressive, fun language for Ethereum, powered by YulDSL/Haskell).","archived":false,"fork":false,"pushed_at":"2025-07-07T09:00:28.000Z","size":1930,"stargazers_count":40,"open_issues_count":0,"forks_count":4,"subscribers_count":4,"default_branch":"master","last_synced_at":"2025-09-01T09:21:50.049Z","etag":null,"topics":["category-theory","compiler","dsl","haskell","linear-types","solidity","yul"],"latest_commit_sha":null,"homepage":"https://yolc.dev","language":"Haskell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/yolc-dev.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","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,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2023-05-16T13:17:29.000Z","updated_at":"2025-07-21T09:22:10.000Z","dependencies_parsed_at":null,"dependency_job_id":"929505d9-a4cf-4bd2-bfd2-d7aabca9e5eb","html_url":"https://github.com/yolc-dev/yul-dsl-monorepo","commit_stats":{"total_commits":68,"total_committers":3,"mean_commits":"22.666666666666668","dds":"0.044117647058823484","last_synced_commit":"80054049e0be2001d5fd6b857d61a3be480e1ab4"},"previous_names":["hellwolf/yul-dsl-monorepo","yolc-dev/yul-dsl-monorepo"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/yolc-dev/yul-dsl-monorepo","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yolc-dev%2Fyul-dsl-monorepo","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yolc-dev%2Fyul-dsl-monorepo/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yolc-dev%2Fyul-dsl-monorepo/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yolc-dev%2Fyul-dsl-monorepo/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/yolc-dev","download_url":"https://codeload.github.com/yolc-dev/yul-dsl-monorepo/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yolc-dev%2Fyul-dsl-monorepo/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":274288009,"owners_count":25257568,"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","status":"online","status_checked_at":"2025-09-09T02:00:10.223Z","response_time":80,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"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":["category-theory","compiler","dsl","haskell","linear-types","solidity","yul"],"created_at":"2025-04-12T16:25:42.848Z","updated_at":"2025-09-09T11:07:25.397Z","avatar_url":"https://github.com/yolc-dev.png","language":"Haskell","funding_links":[],"categories":[],"sub_categories":[],"readme":"Yolc - A Safe, Expressive, Fun Language for Ethereum\n====================================================\n\n\u003cdiv align=\"center\"\u003e\n\u003cp\u003e\n  \u003cimg alt=\"Static Badge\" src=\"https://img.shields.io/badge/AI--Free_Code-Green\"\u003e\n  \u003ca href=\"https://twitter.com/yolc_dev\" target=\"_blank\"\u003e\n    \u003cimg alt=\"X Social: yolc_dev\" src=\"https://img.shields.io/twitter/follow/yolc_dev.svg?style=social\" /\u003e\n  \u003c/a\u003e\n\u003c/p\u003e\n\u003c/div\u003e\n\nThe key motivation behind Yolc is to strike a balance between the following values for building\nEthereum smart contracts.\n\n*Safe*\n\nYolc is purely functional with linear type safety, made for the Ethereum virtual machine.\n\n\u003e What does *purely functional linear type safety* mean here? Read more [here](#).\n\n*Expressive*\n\nYolc embeds itself in the Haskell language before being compiled into Solidity/Yul code.\n\n\u003e Why does *expressiveness* matter? Read more [here](#).\n\n*Fun*\n\nYolc allows you to write safe code in production, a joyful experience for super coders.\n\n\u003e Check out these [example codes](#).\n\n\u003e [!TIP]\n\u003e\n\u003e Yolc is a compiler program for \"YulDSL/Haskell.\" YulDSL is a domain-specific language (DSL) based\n\u003e on [category theory](https://category-theory.org/) for\n\u003e [Solidity/Yul](https://soliditylang.org/). YulDSL can embed itself in different languages, with\n\u003e \"YulDSL/Haskell\" being the first of its kind. Curiously, the name \"yolc\" sounds similar to \"solc,\"\n\u003e the compiler program for \"Solidity/Yul.\"\n\u003e\n\u003e Do not worry if you don't understand some of these concepts. You may start with Yolc right away\n\u003e and have a rewarding, fun experience writing safer production smart contracts. However, if you do\n\u003e feel adventurous and want to delve into the inner workings of YulDSL, read\n\u003e [here](./hs-pkgs/yul-dsl/README.md).\n\n\u003e [!CAUTION]\n\u003e\n\u003e 🚧 While this project is still work in progress 🚧, currently it is of /technical preview/\n\u003e version, read [the introduction](https://yolc.dev/docs/getting-started/introduction/)\n\u003e\n\u003e Contact me at info@yolc.dev or join the [matrix room](https://matrix.to/#/#yolc:matrix.org) if you\n\u003e want to learn more!\n\n------------------------------------------------------------------------------------------\n\nFeatures\n========\n\nEthereum-Compatible \u0026 Extensible Types\n--------------------------------------\n\n\u003e [!NOTE]\n\u003e\n\u003e These include [Ethereum contract ABI\n\u003e specification](https://docs.soliditylang.org/en/latest/abi-spec.html) implemented in as *core\n\u003e types*, their *type extensions*, including *dependently typed extensions*.\n\nUnlike solidity, and to accommodate Haskell lexical rules, types are all in capitalized letters:\n\n* Boolean type `BOOL`, and its values `true`, `false`.\n* Address type `ADDR`.\n* Integers types: `I8`, `I16`, ... `I256`; `U8`, `U16`, ... `U256`.\n* etc.\n\nFull table of the types implemented and planned can be found [here](./hs-pkgs/eth-abi/README.md).\n\nExpressive Pure Functions\n-------------------------\n\n**Haskell Native Syntax**\n\nTODO.\n\n**Currying Function Definition**\n\n```haskell\n-- define a pure value function\nPureFn (U256 -\u003e U256 -\u003e U256)\nfoo3 = $fn\n  \\a b c -\u003e a + b + c\n\n-- call other pure value function\ncall_foo3 :: PureFn (U256 -\u003e U256)\ncall_foo3 = $fn\n  \\a -\u003e callFn foo3 a a a\n```\n\n**Pattern Matching**\n\n```haskell\n-- ⭐ pattern matching coming to Ethereum\n\\x y def -\u003e match (x + y) \\case\n  Nothing -\u003e def  -- number overflown\n  Just z  -\u003e z    -- just do it\n```\n\nLinear Safety For Side Effects\n------------------------------\n\n```haskell\n-- | Mint new tokens\nmint :: OmniFn (ADDR -\u003e U256 -\u003e ())\nmint = $lfn $ ylvm'pv\n  \\(Uv to) (Uv amount) -\u003e LVM.do\n    Rv balanceBefore \u003c- ycall balanceOf (ver to)\n    -- calculate new balance\n    (Rv newAmount) \u003c- ywithrv_1 @(U256 -\u003e U256 -\u003e U256)\n      (Rv balanceBefore, ver amount)\n      (\\x y -\u003e x + y)\n    -- update balance\n    sputs $ balanceMap .-\u003e to := newAmount :|[]\n    -- call unsafe external contract onTokenMinted\n    ycall (to @-\u003e onTokenMinted) (ver to) (ver amount)\n```\n\nFoundry Integration\n-------------------\n\nYolc leverages the power of the best tooling in the ecosystem while focusing on what it is best at:\nA safe, expressive, and fun programming language. It is not a full toolkit for Ethereum\ndevelopment. Hence, Yolk works best in tandem with the [foundry\ntoolkit](https://github.com/foundry-rs/foundry).\n\n------------------------------------------------------------------------------------------\n\nPackages\n========\n\n- [*eth-abi*](./hs-pkgs/eth-abi/README.md) - Ethereum contract ABI specification in Haskell\n- [*yul-dsl*](./hs-pkgs/yul-dsl/README.md) - A DSL targets Solidity/Yul\n- [*yul-dsl-pure*](#) - YulDSL/Haskell's support for pure effects\n- [*yul-dsl-linear-smc*](./hs-pkgs/yul-dsl-linear-smc/README.md) - YulDSL/Haskell's support for side\n  effects using linear types\n- [*yol-suite*](./hs-pkgs/yol-suite/README.md) - A Collection of YulDSL Programs for the New Pioneer\n  of Ethereum Smart Contracts Development\n  - **yolc**: the evil twin of \"solc\"; this is the compiler program for \"YulDSL/Haskell\".\n  - **attila**: who wields the foundy, forges his path; this is the counter part of the \"forge\" from\n    [foundry](https://github.com/foundry-rs/foundry). However, it mostly invokes directly \"forge\"\n    for you, since yol-suite integrates itself with the [foundry\n    toolkit](https://github.com/foundry-rs/foundry).\n  - **drwitch**: who persuades the tyrant, shapes our history; this is the counterpart of the\n    \"cast\" from [foundry](https://github.com/foundry-rs/foundry).\n\n------------------------------------------------------------------------------------------\n\nRoadmap\n=======\n\nFor the ongoing feature development, here is the complete [todo list](TODO.md).\n\nMilestones\n----------\n\n- [x] Jan 6th, 2025: public announcement, with the first technical release (unversioned).\n- [ ] End of Apr 2025: version 0.0.1.0 with major features completion.\n- [ ] End of May 2025: version 0.0.2.0 with first live in production projects.\n- ...\n\nResearch Topics\n---------------\n\n- A paper on the linearly versioned monad, the cornerstone of Yolc's linear safety, as a survey of\n  comparing it to other resource management methods, including monadic regions, CoDensity, etc.\n- Liquid Haskell integration.\n- Extend core types through dependent types.\n- Portable YulDSL artifact as multi-languages modules for non-Haskell language usages.\n\n\u003c!--\nLocal Variables:\nfill-column: 100\nEnd:\n--\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fyolc-dev%2Fyul-dsl-monorepo","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fyolc-dev%2Fyul-dsl-monorepo","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fyolc-dev%2Fyul-dsl-monorepo/lists"}