{"id":18357130,"url":"https://github.com/funkia/purescript-hareactive","last_synced_at":"2025-04-10T01:53:23.940Z","repository":{"id":58231107,"uuid":"126000473","full_name":"funkia/purescript-hareactive","owner":"funkia","description":"PureScript bindings for the FRP library Hareactive","archived":false,"fork":false,"pushed_at":"2019-07-29T11:58:23.000Z","size":126,"stargazers_count":26,"open_issues_count":3,"forks_count":1,"subscribers_count":6,"default_branch":"master","last_synced_at":"2025-03-15T18:04:37.956Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"PureScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/funkia.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}},"created_at":"2018-03-20T10:28:46.000Z","updated_at":"2023-09-20T01:24:03.000Z","dependencies_parsed_at":"2022-08-30T20:10:30.931Z","dependency_job_id":null,"html_url":"https://github.com/funkia/purescript-hareactive","commit_stats":null,"previous_names":[],"tags_count":12,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/funkia%2Fpurescript-hareactive","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/funkia%2Fpurescript-hareactive/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/funkia%2Fpurescript-hareactive/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/funkia%2Fpurescript-hareactive/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/funkia","download_url":"https://codeload.github.com/funkia/purescript-hareactive/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248142939,"owners_count":21054671,"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":[],"created_at":"2024-11-05T22:12:56.341Z","updated_at":"2025-04-10T01:53:23.914Z","avatar_url":"https://github.com/funkia.png","language":"PureScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# purescript-hareactive\n\n[![Hareactive on Pursuit](https://pursuit.purescript.org/packages/purescript-hareactive/badge)](https://pursuit.purescript.org/packages/purescript-hareactive)\n[![Build status](https://travis-ci.org/funkia/purescript-hareactive.svg?branch=master)](https://travis-ci.org/funkia/purescript-hareactive)\n\nHareactive is a practical, powerful, and simple FRP library.\n\n## Highlights\n\n* Implements classic FRP with behaviors and streams.\n* Supports continuous time and integration.\n* Higher-order monadic behaviors.\n* Efficient push and pull implementation.\n* Simple precise semantics.\n* Supports circular dependencies i.e. recursively defined behaviors.\n* Easy integration with both `Effect` and `Aff` for side-effects.\n* Suitable for building UI (see also [purescript-turbine](https://github.com/funkia/purescript-turbine)).\n\n## Examples\n\n### Counter\n\n![single counter GIF](examples/counter/single-counter.gif)\n\nA simple example which show how to create a counter with FRP and demonstrates\nhow to integrate Hareactive with the DOM. [Source\ncode](/examples/counter/src/Main.purs).\n\n## Background\n\nHareactive is highly inspired by the papers [Push-Pull Functional Reactive\nProgramming](http://conal.net/papers/push-pull-frp/) by Conal Elliott and\n[Practical principled FPP](https://dl.acm.org/citation.cfm?id=2784752) by Atze\nvan der Ploeg and Koen Claessen.\n\nHareactive implements _classic_ FRP. This means that it makes a distinction\nbetween _behaviors_ and _streams_ (what Hareactive calls streams is often called\nevent). As for why that distinction is useful see the blogpost [Behaviors and\nstreams, why both?](http://vindum.io/blog/behaviors-and-streams-why-both/).\n\nBehaviors in Hareactive are _monads_. Monadic behaviors are essential for many\npractical purposes. Behaviors in Hareactive can be _continuous_, i.e. change\ninfinetly often. Among other things this means that Hareactive support continous\ntime and integration.\n\nHareactive supports stateful behaviors (i.e. behaviors that depends on the\npast). It does so while avoiding the problems with space and time leaks that\nFRP are notorius for.\n\nA key focus is to implement a simple precise semantic model following in the\nspirit of Conal Elliott. The semantics serve as a specification for determining\nthe correctness of the implementation. Additionally, it is a mental model which\ncan be used to reason about the library.\n\nHareactive is implemented in carefully optimized TypeScript.\n\n## Install\n\n```\nnpm i @funkia/hareactive\nbower install --save purescript-hareactive\n```\n\n## Documentation\n\nModule documentation is published on\n[Pursuit](https://pursuit.purescript.org/packages/purescript-hareactive).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffunkia%2Fpurescript-hareactive","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ffunkia%2Fpurescript-hareactive","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffunkia%2Fpurescript-hareactive/lists"}