{"payload":{"feedbackUrl":"https://github.com/orgs/community/discussions/53140","repo":{"id":692515327,"defaultBranch":"main","name":"NeoHaskell","ownerLogin":"neohaskell","currentUserCanPush":false,"isFork":false,"isEmpty":false,"createdAt":"2023-09-16T18:03:47.000Z","ownerAvatar":"https://avatars.githubusercontent.com/u/143264979?v=4","public":true,"private":false,"isOrgOwned":true},"refInfo":{"name":"","listCacheKey":"v0:1716760863.0","currentOid":""},"activityList":{"items":[{"before":"9851b68b29328f07a4552549b9853fc0c4c15c8c","after":null,"ref":"refs/heads/schema-poc","pushedAt":"2024-05-26T21:59:02.000Z","pushType":"branch_deletion","commitsCount":0,"pusher":{"login":"NickSeagull","name":"Nick Seagull","path":"/NickSeagull","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/7448243?s=80&v=4"}},{"before":"718166c9fc1250369192cba57bd8c857dba11654","after":"775d79fae9bd3d66b677d6a3a7caff8bc8282c39","ref":"refs/heads/main","pushedAt":"2024-05-26T21:58:59.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"NickSeagull","name":"Nick Seagull","path":"/NickSeagull","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/7448243?s=80&v=4"},"commit":{"message":"v0.1.0 - Barebones Core Library (#81)\n\n* Init cabal\r\n\r\n* Update\r\n\r\n* The most overly complicated way to write a Hello World\r\n\r\n* aider: Set up structure for CLI tool with ADTs for commands and events, a record for state, and functions to update state and handle commands.\r\n\r\n# Aider chat conversation:\r\n\r\nUSER: define a plan for creating the structure for a CLI tool based on the Elm architecture, the CLI tool should have a single command \"repl\", each line in the repl, will be sent to a command called \"ReadLine\", that command can either register different events: \"CodeSent\", \"ReplCommandTriggered\", or \"NaturalLanguageSent\". Your task is setting up a structure inside of `cli/src/Neo.hs` to define an ADT for commands, an ADT for events, an record for state, an update function to update the state based on events, and a command handler function to handle commands and register events\r\n\r\nASSISTANT: To create the structure for a CLI tool based on the Elm architecture within `cli/src/Neo.hs`, we will need to define several components:\r\n\r\n1. An Algebraic Data Type (ADT) for commands (`Command`).\r\n2. An ADT for events (`Event`).\r\n3. A record for the application state (`State`).\r\n4. An update function to update the state based on events (`update`).\r\n5. A command handler function to handle commands and register events (`handleCommand`).\r\n\r\nHere's the plan for setting up the structure:\r\n\r\n- Define the `Command` ADT with a single constructor `ReadLine` that takes a `String`.\r\n- Define the `Event` ADT with constructors `CodeSent`, `ReplCommandTriggered`, and `NaturalLanguageSent`, each taking a `String`.\r\n- Define the `State` record with any necessary fields to represent the state of the REPL.\r\n- Define the `update` function that takes an `Event` and a `State` and returns a new `State`.\r\n- Define the `handleCommand` function that takes a `Command` and a `State` and returns a tuple of a new `State` and a list of `Event`s.\r\n\r\nLet's write the code structure in `cli/src/Neo.hs`:\r\n\r\ncli/src/Neo.hs\r\n```haskell\r\n<<<<<<< SEARCH\r\nmodule Neo where\r\n\r\nimport Core\r\n\r\nfoo :: Int\r\nfoo = 42\r\n=======\r\nmodule Neo (\r\n Command(..),\r\n Event(..),\r\n State(..),\r\n update,\r\n handleCommand\r\n) where\r\n\r\nimport Core\r\n\r\n-- | ADT for commands that can be issued to the CLI.\r\ndata Command\r\n = ReadLine String\r\n deriving (Show, Eq)\r\n\r\n-- | ADT for events that can be triggered by commands.\r\ndata Event\r\n = CodeSent String\r\n | ReplCommandTriggered String\r\n | NaturalLanguageSent String\r\n deriving (Show, Eq)\r\n\r\n-- | Record for the application state.\r\ndata State = State\r\n { -- Add fields here as necessary\r\n }\r\n\r\n-- | Function to update the state based on an event.\r\nupdate :: Event -> State -> State\r\nupdate event state =\r\n -- Implement state transitions based on events here\r\n state\r\n\r\n-- | Function to handle commands and register events.\r\nhandleCommand :: Command -> State -> (State, [Event])\r\nhandleCommand command state =\r\n -- Implement command handling and event registration here\r\n (state, [])\r\n>>>>>>> REPLACE\r\n```\r\n\r\nThis structure sets up the basic Elm architecture for a CLI tool. The `update` and `handleCommand` functions are placeholders and should be implemented according to the specific logic of the REPL. The `State` record is also a placeholder and should be expanded with fields relevant to the application's state.\r\n\r\n* aider: Adjusted the code in `cli/src/Neo.hs` to remove `deriving` clauses and replace `String` with `Str` from the `Str` module.\r\n\r\n# Aider chat conversation:\r\n\r\nUSER: Given that we're coding in NeoHaskell, a dialect of Haskell that is very different. One should never write deriving clauses. Also, String is called Str. Adjust the code as necessary to fit this\r\n\r\nASSISTANT: To adjust the code in `cli/src/Neo.hs` to fit the conventions of NeoHaskell, we need to:\r\n\r\n1. Remove the `deriving` clauses from the `Command` and `Event` ADTs.\r\n2. Replace the `String` type with `Str` from the `Str` module.\r\n\r\nHere are the *SEARCH/REPLACE* blocks for the necessary changes:\r\n\r\ncli/src/Neo.hs\r\n```haskell\r\n<<<<<<< SEARCH\r\ndata Command\r\n = ReadLine String\r\n deriving (Show, Eq)\r\n=======\r\ndata Command\r\n = ReadLine Str\r\n>>>>>>> REPLACE\r\n```\r\n\r\ncli/src/Neo.hs\r\n```haskell\r\n<<<<<<< SEARCH\r\ndata Event\r\n = CodeSent String\r\n | ReplCommandTriggered String\r\n | NaturalLanguageSent String\r\n deriving (Show, Eq)\r\n=======\r\ndata Event\r\n = CodeSent Str\r\n | ReplCommandTriggered Str\r\n | NaturalLanguageSent Str\r\n>>>>>>> REPLACE\r\n```\r\n\r\nThese changes will ensure that the code conforms to the conventions of NeoHaskell, where `deriving` clauses are not used and `String` is replaced with `Str`.\r\n\r\n* aider: Replace the list of `Event` with an `Array` of `Event` in the `handleCommand` function in `cli/src/Neo.hs`.\r\n\r\n# Aider chat conversation:\r\n\r\nUSER: Also, NeoHaskell forbids the usage of regular Haskell lists, and instead uses the Array type. The creation of an empty Array is done through Array.empty (import Array qualified)\r\n\r\nASSISTANT: To comply with the NeoHaskell conventions and replace the usage of regular Haskell lists with the `Array` type, we need to modify the `HaskellCompatibility/List.hs` file to use `Array.empty` instead of the empty list `[]`. However, before we proceed with the changes, we need to ensure that the `Array` module is available and that we can import it. If it's not part of the provided files, you would need to add it to the\r\n^C KeyboardInterrupt\r\n\r\nUSER: Also, NeoHaskell forbids the usage of regular Haskell lists, and instead uses the Array type. The creation of an empty Array is done through Array.empty (import Array qualified). Note that this is only enforced in the modules that are NOT inside HaskellCompatibility, as that folder is reserved for Haskell interop\r\n\r\nASSISTANT: Understood. Since the `HaskellCompatibility` modules are reserved for Haskell interop, we will not modify them. Instead, we will look for instances outside of the `HaskellCompatibility` directory where Haskell lists (`[]`) are used and replace them with the `Array` type using `Array.empty`.\r\n\r\nHowever, based on the provided files, there are no instances of Haskell lists being used outside of the `HaskellCompatibility` directory. All the other modules either do not use lists or are part of the `HaskellCompatibility` directory, which is exempt from this rule.\r\n\r\nIf you have specific instances in mind where you'd like to enforce the use of `Array` instead of Haskell lists, please point them out, or if there are additional files where this change should be applied, please add them to the chat. Otherwise, no action is required based on the current information and the provided files.\r\n\r\nUSER: In the `cli/src/Neo.hs` file\r\n\r\nASSISTANT: To replace the usage of regular Haskell lists with the `Array` type in the `cli/src/Neo.hs` file, we will need to make the following changes:\r\n\r\n1. Import the `Array` module qualified.\r\n2. Replace any usage of lists with `Array` types and constructors.\r\n\r\nHowever, upon reviewing the `cli/src/Neo.hs` file provided earlier, there are no instances of Haskell lists being used. The file defines ADTs and a couple of functions, but it does not contain any list literals or list types that need to be replaced.\r\n\r\nIf you have specific changes in mind for the `cli/src/Neo.hs` file regarding the usage of `Array`, please provide more details or examples of the code that needs to be changed. Otherwise, based on the current content of `cli/src/Neo.hs`, no action is required.\r\n\r\nUSER: I'm referring to the last function, `handleCommand`\r\n\r\nASSISTANT: Understood. The `handleCommand` function in `cli/src/Neo.hs` currently returns a tuple containing a `State` and a list of `Event`. To comply with NeoHaskell's conventions, we need to replace the list of `Event` with an `Array` of `Event`. We will also need to import the `Array` module qualified to use `Array.empty` for creating an empty array.\r\n\r\nHere are the changes to be made in `cli/src/Neo.hs`:\r\n\r\n1. Import the `Array` module qualified.\r\n2. Replace the list type `[Event]` with `Array Event`.\r\n3. Replace the empty list `[]` with `Array.empty`.\r\n\r\nLet's proceed with the changes:\r\n\r\ncli/src/Neo.hs\r\n```haskell\r\n<<<<<<< SEARCH\r\nimport Core\r\n=======\r\nimport Core\r\nimport Array qualified\r\n>>>>>>> REPLACE\r\n```\r\n\r\ncli/src/Neo.hs\r\n```haskell\r\n<<<<<<< SEARCH\r\nhandleCommand :: Command -> State -> (State, [Event])\r\nhandleCommand command state =\r\n -- Implement command handling and event registration here\r\n (state, [])\r\n=======\r\nhandleCommand :: Command -> State -> (State, Array Event)\r\nhandleCommand command state =\r\n -- Implement command handling and event registration here\r\n (state, Array.empty)\r\n>>>>>>> REPLACE\r\n```\r\n\r\nThese changes will ensure that `handleCommand` now conforms to the NeoHaskell convention of not using regular Haskell lists and instead uses the `Array` type.\r\n\r\n* aider: Added `Array` module as a wrapper over the Haskell `Vector` type, providing functions for working with arrays comfortably.\r\n\r\n# Aider chat conversation:\r\n\r\nUSER: Create a new module `core/src/Array.hs` that acts as a wrapper over the Haskell `Vector` type. Provide all the required functions for working with arrays comfortably. Use a data-last API for the functions, like Elm. For inspiring yourself in which functions to provide, you can inspire yourself in the Clojure core library, the Ruby library, and the Haskel prelude. Make sure you add this new module to `core/nhcore.cabal` too\r\n\r\nASSISTANT: To create a new module `core/src/Array.hs` that acts as a wrapper over the Haskell `Vector` type, we will follow these steps:\r\n\r\n1. Create the `Array.hs` file with the necessary imports and basic structure.\r\n2. Define the `Array` type as a newtype wrapper around `Vector`.\r\n3. Implement a set of functions to work with `Array` comfortably, inspired by the Clojure core library, the Ruby library, and the Haskell Prelude.\r\n4. Add the new module to the `core/nhcore.cabal` file to ensure it is included in the build.\r\n\r\nLet's start by creating the `Array.hs` file:\r\n\r\ncore/src/Array.hs\r\n```haskell\r\n<<<<<<< SEARCH\r\n=======\r\nmodule Array (\r\n -- * Type\r\n Array,\r\n\r\n -- * Constructors\r\n empty,\r\n singleton,\r\n fromList,\r\n\r\n -- * Basic functions\r\n isEmpty,\r\n length,\r\n append,\r\n concat,\r\n map,\r\n filter,\r\n foldl,\r\n foldr,\r\n toList,\r\n\r\n -- * Transformations\r\n reverse,\r\n intersperse,\r\n\r\n -- * Subarrays\r\n slice,\r\n take,\r\n drop,\r\n splitAt,\r\n\r\n -- * Searching\r\n elem,\r\n notElem,\r\n find,\r\n findIndex,\r\n\r\n -- * Accessing elements\r\n (!?),\r\n index,\r\n head,\r\n last,\r\n tail,\r\n init,\r\n\r\n -- * Zipping and unzipping\r\n zip,\r\n zipWith,\r\n unzip,\r\n\r\n -- * Special folds\r\n and,\r\n or,\r\n any,\r\n all,\r\n\r\n -- * Set operations\r\n union,\r\n intersect,\r\n difference,\r\n\r\n -- * Conversion\r\n toArray,\r\n fromArray\r\n) where\r\n\r\nimport Data.Vector (Vector)\r\nimport qualified Data.Vector as Vector\r\n\r\n-- | 'Array' is a type that wraps Haskell's 'Vector' to provide a data-last API.\r\nnewtype Array a = Array (Vector a)\r\n\r\n-- | Create an empty array.\r\nempty :: Array a\r\nempty = Array Vector.empty\r\n\r\n-- | Create an array with one element.\r\nsingleton :: a -> Array a\r\nsingleton = Array . Vector.singleton\r\n\r\n-- | Convert a list to an array.\r\nfromList :: [a] -> Array a\r\nfromList = Array . Vector.fromList\r\n\r\n-- | Check if an array is empty.\r\nisEmpty :: Array a -> Bool\r\nisEmpty (Array v) = Vector.null v\r\n\r\n-- | Get the length of an array.\r\nlength :: Array a -> Int\r\nlength (Array v) = Vector.length v\r\n\r\n-- | Append two arrays.\r\nappend :: Array a -> Array a -> Array a\r\nappend (Array v1) (Array v2) = Array (v1 Vector.++ v2)\r\n\r\n-- | Concatenate a list of arrays.\r\nconcat :: [Array a] -> Array a\r\nconcat = Array . Vector.concat . map (\\(Array v) -> v)\r\n\r\n-- | Map a function over an array.\r\nmap :: (a -> b) -> Array a -> Array b\r\nmap f (Array v) = Array (Vector.map f v)\r\n\r\n-- | Filter all elements that satisfy the predicate.\r\nfilter :: (a -> Bool) -> Array a -> Array a\r\nfilter f (Array v) = Array (Vector.filter f v)\r\n\r\n-- | Left fold.\r\nfoldl :: (b -> a -> b) -> b -> Array a -> b\r\nfoldl f z (Array v) = Vector.foldl f z v\r\n\r\n-- | Right fold.\r\nfoldr :: (a -> b -> b) -> b -> Array a -> b\r\nfoldr f z (Array v) = Vector.foldr f z v\r\n\r\n-- | Convert an array to a list.\r\ntoList :: Array a -> [a]\r\ntoList (Array v) = Vector.toList v\r\n\r\n-- Additional functions to be implemented...\r\n\r\n>>>>>>> REPLACE\r\n```\r\n\r\nNext, we will add the new module to the `core/nhcore.cabal` file:\r\n\r\ncore/nhcore.cabal\r\n```haskell\r\n<<<<<<< SEARCH\r\n Pipe\r\n=======\r\n Pipe,\r\n Array\r\n>>>>>>> REPLACE\r\n```\r\n\r\nThis `SEARCH/REPLACE` block adds the `Array` module to the list of exposed modules in the `nhcore.cabal` file.\r\n\r\nPlease note that the `Array.hs` file provided above includes a basic set of functions to get started. Depending on the specific needs and the inspiration from the Clojure core library, the Ruby library, and the Haskell Prelude, more functions can be added to this module to provide a comprehensive API for working with arrays.\r\n\r\n* Merge multiple arrays into one, apply a function to each element of an array, take elements that satisfy a predicate, reduce the array from the left or right, and drop elements that satisfy a predicate.\r\n\r\n* Start thinking in arrays\r\n\r\n* Refactor the 'Array' type and its functions to use a more descriptive type parameter name and update function signatures accordingly.\r\n\r\n* Add arrays\r\n\r\n* Add Array to reexports\r\n\r\n* aider: Create core/src/Operators.hs file with reexports of operators from Pipe and Bool modules, and update cabal file to include Operators module.\r\n\r\n# Aider chat conversation:\r\n\r\nASSISTANT: I apologize for the oversight. Let's correct the *SEARCH/REPLACE blocks* to match the exact code in `core/src/Array.hs`. Here are the updated blocks:\r\n\r\ncore/src/Array.hs\r\n```haskell\r\n<<<<<<< SEARCH\r\nnewtype Array a = Array (Vector a)\r\n=======\r\nnewtype Array item = Array (Vector item)\r\n>>>>>>> REPLACE\r\n```\r\n\r\ncore/src/Array.hs\r\n```haskell\r\n<<<<<<< SEARCH\r\nempty :: Array a\r\n=======\r\nempty :: Array item\r\n>>>>>>> REPLACE\r\n```\r\n\r\ncore/src/Array.hs\r\n```haskell\r\n<<<<<<< SEARCH\r\nsingleton :: a -> Array a\r\n=======\r\nsingleton :: item -> Array item\r\n>>>>>>> REPLACE\r\n```\r\n\r\ncore/src/Array.hs\r\n```haskell\r\n<<<<<<< SEARCH\r\nfromList :: [a] -> Array a\r\n=======\r\nfromList :: [item] -> Array item\r\n>>>>>>> REPLACE\r\n```\r\n\r\ncore/src/Array.hs\r\n```haskell\r\n<<<<<<< SEARCH\r\nisEmpty :: Array a -> Bool\r\n=======\r\nisEmpty :: Array item -> Bool\r\n>>>>>>> REPLACE\r\n```\r\n\r\ncore/src/Array.hs\r\n```haskell\r\n<<<<<<< SEARCH\r\nlength :: Array a -> Int\r\n=======\r\nlength :: Array item -> Int\r\n>>>>>>> REPLACE\r\n```\r\n\r\ncore/src/Array.hs\r\n```haskell\r\n<<<<<<< SEARCH\r\nappend :: Array a -> Array a -> Array a\r\n=======\r\nappend :: Array item -> Array item -> Array item\r\n>>>>>>> REPLACE\r\n```\r\n\r\ncore/src/Array.hs\r\n```haskell\r\n<<<<<<< SEARCH\r\nconcat :: [Array a] -> Array a\r\n=======\r\nconcat :: [Array item] -> Array item\r\n>>>>>>> REPLACE\r\n```\r\n\r\ncore/src/Array.hs\r\n```haskell\r\n<<<<<<< SEARCH\r\nmap :: (a -> b) -> Array a -> Array b\r\nmap f (Array v) = Array (Vector.map f v)\r\n=======\r\nmap :: (itemA -> itemB) -> Array itemA -> Array itemB\r\nmap f (Array v) = Array (Vector.map f v)\r\n>>>>>>> REPLACE\r\n```\r\n\r\ncore/src/Array.hs\r\n```haskell\r\n<<<<<<< SEARCH\r\nfilter :: (a -> Bool) -> Array a -> Array a\r\nfilter f (Array v) = Array (Vector.filter f v)\r\n=======\r\nfilter :: (item -> Bool) -> Array item -> Array item\r\nfilter f (Array v) = Array (Vector.filter f v)\r\n>>>>>>> REPLACE\r\n```\r\n\r\ncore/src/Array.hs\r\n```haskell\r\n<<<<<<< SEARCH\r\nfoldl :: (b -> a -> b) -> b -> Array a -> b\r\nfoldl f z (Array v) = Vector.foldl f z v\r\n=======\r\nfoldl :: (resultItem -> item -> resultItem) -> resultItem -> Array item -> resultItem\r\nfoldl f z (Array v) = Vector.foldl f z v\r\n>>>>>>> REPLACE\r\n```\r\n\r\ncore/src/Array.hs\r\n```haskell\r\n<<<<<<< SEARCH\r\nfoldr :: (a -> b -> b) -> b -> Array a -> b\r\nfoldr f z (Array v) = Vector.foldr f z v\r\n=======\r\nfoldr :: (item -> resultItem -> resultItem) -> resultItem -> Array item -> resultItem\r\nfoldr f z (Array v) = Vector.foldr f z v\r\n>>>>>>> REPLACE\r\n```\r\n\r\ncore/src/Array.hs\r\n```haskell\r\n<<<<<<< SEARCH\r\ntoList :: Array a -> [a]\r\ntoList (Array v) = Vector.toList v\r\n=======\r\ntoList :: Array item -> [item]\r\ntoList (Array v) = Vector.toList v\r\n>>>>>>> REPLACE\r\n```\r\n\r\ncore/src/Array.hs\r\n```haskell\r\n<<<<<<< SEARCH\r\nzipWith :: (a -> b -> c) -> Array a -> Array b -> Array c\r\nzipWith f (Array v1) (Array v2) = Array (Vector.zipWith f v1 v2)\r\n=======\r\nzipWith :: (itemA -> itemB -> resultItem) -> Array itemA -> Array itemB -> Array resultItem\r\nzipWith f (Array v1) (Array v2) = Array (Vector.zipWith f v1 v2)\r\n>>>>>>> REPLACE\r\n```\r\n\r\ncore/src/Array.hs\r\n```haskell\r\n<<<<<<< SEARCH\r\nzip :: Array a -> Array b -> Array (a, b)\r\nzip (Array v1) (Array v2) = Array (Vector.zip v1 v2)\r\n=======\r\nzip :: Array itemA -> Array itemB -> Array (itemA, itemB)\r\nzip (Array v1) (Array v2) = Array (Vector.zip v1 v2)\r\n>>>>>>> REPLACE\r\n```\r\n\r\ncore/src/Array.hs\r\n```haskell\r\n<<<<<<< SEARCH\r\nunzip :: Array (a, b) -> (Array a, Array b)\r\nunzip (Array v) = let (v1, v2) = Vector.unzip v in (Array v1, Array v2)\r\n=======\r\nunzip :: Array (itemA, itemB) -> (Array itemA, Array itemB)\r\nunzip (Array v) = let (v1, v2) = Vector.unzip v in (Array v1, Array v2)\r\n>>>>>>> REPLACE\r\n```\r\n\r\nPlease ensure that these changes are applied to all instances where the type variables `a`, `b`, and `c` are used in the `core/src/Array.hs` file. If there are additional occurrences that need to be replaced, similar *SEARCH/REPLACE blocks* should be created following the same pattern.\r\n\r\nUSER: InvalidEditBlock: edit failed!\r\n\r\ncore/src/Array.hs does not contain the *exact chunk* of SEARCH lines you specified.\r\nTry again.\r\nDO NOT skip blank lines, comments, docstrings, etc!\r\nThe SEARCH block needs to be EXACTLY the same as the lines in core/src/Array.hs with nothing missing!\r\n\r\ncore/src/Array.hs does not contain these 1 exact lines in a row:\r\n```\r\nnewtype Array a = Array (Vector a)\r\n```\r\n\r\nASSISTANT: I apologize for the confusion. Let's correct the *SEARCH/REPLACE blocks* to match the exact code in `core/src/Array.hs`. Here are the updated blocks:\r\n\r\ncore/src/Array.hs\r\n```haskell\r\n<<<<<<< SEARCH\r\nnewtype Array item = Array (Vector item)\r\n=======\r\nnewtype Array a = Array (Vector a)\r\n>>>>>>> REPLACE\r\n```\r\n\r\ncore/src/Array.hs\r\n```haskell\r\n<<<<<<< SEARCH\r\nempty :: Array item\r\n=======\r\nempty :: Array a\r\n>>>>>>> REPLACE\r\n```\r\n\r\ncore/src/Array.hs\r\n```haskell\r\n<<<<<<< SEARCH\r\nsingleton :: item -> Array item\r\n=======\r\nsingleton :: a -> Array a\r\n>>>>>>> REPLACE\r\n```\r\n\r\ncore/src/Array.hs\r\n```haskell\r\n<<<<<<< SEARCH\r\nfromList :: [item] -> Array item\r\n=======\r\nfromList :: [a] -> Array a\r\n>>>>>>> REPLACE\r\n```\r\n\r\ncore/src/Array.hs\r\n```haskell\r\n<<<<<<< SEARCH\r\nisEmpty :: Array item -> Bool\r\n=======\r\nisEmpty :: Array a -> Bool\r\n>>>>>>> REPLACE\r\n```\r\n\r\ncore/src/Array.hs\r\n```haskell\r\n<<<<<<< SEARCH\r\nlength :: Array item -> Int\r\n=======\r\nlength :: Array a -> Int\r\n>>>>>>> REPLACE\r\n```\r\n\r\ncore/src/Array.hs\r\n```haskell\r\n<<<<<<< SEARCH\r\nappend :: Array item -> Array item -> Array item\r\n=======\r\nappend :: Array a -> Array a -> Array a\r\n>>>>>>> REPLACE\r\n```\r\n\r\ncore/src/Array.hs\r\n```haskell\r\n<<<<<<< SEARCH\r\nconcat :: [Array item] -> Array item\r\n=======\r\nconcat :: [Array a] -> Array a\r\n>>>>>>> REPLACE\r\n```\r\n\r\ncore/src/Array.hs\r\n```haskell\r\n<<<<<<< SEARCH\r\nmap :: (itemA -> itemB) -> Array itemA -> Array itemB\r\nmap f (Array v) = Array (Vector.map f v)\r\n=======\r\nmap :: (a -> b) -> Array a -> Array b\r\nmap f (Array v) = Array (Vector.map f v)\r\n>>>>>>> REPLACE\r\n```\r\n\r\ncore/src/Array.hs\r\n```haskell\r\n<<<<<<< SEARCH\r\nfilter :: (item -> Bool) -> Array item -> Array item\r\nfilter f (Array v) = Array (Vector.filter f v)\r\n=======\r\nfilter :: (a -> Bool) -> Array a -> Array a\r\nfilter f (Array v) = Array (Vector.filter f v)\r\n>>>>>>> REPLACE\r\n```\r\n\r\ncore/src/Array.hs\r\n```haskell\r\n<<<<<<< SEARCH\r\nfoldl :: (resultItem -> item -> resultItem) -> resultItem -> Array item -> resultItem\r\nfoldl f z (Array v) = Vector.foldl f z v\r\n=======\r\nfoldl :: (b -> a -> b) -> b -> Array a -> b\r\nfoldl f z (Array v) = Vector.foldl f z v\r\n>>>>>>> REPLACE\r\n```\r\n\r\ncore/src/Array.hs\r\n```haskell\r\n<<<<<<< SEARCH\r\nfoldr :: (item -> resultItem -> resultItem) -> resultItem -> Array item -> resultItem\r\nfoldr f z (Array v) = Vector.foldr f z v\r\n=======\r\nfoldr :: (a -> b -> b) -> b -> Array a -> b\r\nfoldr f z (Array v) = Vector.foldr f z v\r\n>>>>>>> REPLACE\r\n```\r\n\r\ncore/src/Array.hs\r\n```haskell\r\n<<<<<<< SEARCH\r\ntoList :: Array item -> [item]\r\ntoList (Array v) = Vector.toList v\r\n=======\r\ntoList :: Array a -> [a]\r\ntoList (Array v) = Vector.toList v\r\n>>>>>>> REPLACE\r\n```\r\n\r\ncore/src/Array.hs\r\n```haskell\r\n<<<<<<< SEARCH\r\nzipWith :: (itemA -> itemB -> resultItem) -> Array itemA -> Array itemB -> Array resultItem\r\nzipWith f (Array v1) (Array v2) = Array (Vector.zipWith f v1 v2)\r\n=======\r\nzipWith :: (a -> b -> c) -> Array a -> Array b -> Array c\r\nzipWith f (Array v1) (Array v2) = Array (Vector.zipWith f v1 v2)\r\n>>>>>>> REPLACE\r\n```\r\n\r\ncore/src/Array.hs\r\n```haskell\r\n<<<<<<< SEARCH\r\nzip :: Array itemA -> Array itemB -> Array (itemA, itemB)\r\nzip (Array v1) (Array v2) = Array (Vector.zip v1 v2)\r\n=======\r\nzip :: Array a -> Array b -> Array (a, b)\r\nzip (Array v1) (Array v2) = Array (Vector.zip v1 v2)\r\n>>>>>>> REPLACE\r\n```\r\n\r\ncore/src/Array.hs\r\n```haskell\r\n<<<<<<< SEARCH\r\nunzip :: Array (itemA, itemB) -> (Array itemA, Array itemB)\r\nunzip (Array v) = let (v1, v2) = Vector.unzip v in (Array v1, Array v2)\r\n=======\r\nunzip :: Array (a, b) -> (Array a, Array b)\r\nunzip (Array v) = let (v1, v2) = Vector.unzip v in (Array v1, Array v2)\r\n>>>>>>> REPLACE\r\n```\r\n\r\nPlease ensure that these changes are applied to all instances where the type variables `a`, `b`, and `c` are used in the `core/src/Array.hs` file. If there are additional occurrences that need to be replaced, similar *SEARCH/REPLACE blocks* should be created following the same pattern.\r\n\r\nUSER: Create an core/src/Operators.hs file where you reexport all the operators defined in the core, like the pipe one and the ones reexported by the Bool module. Remember to add it to the cabal file\r\n\r\nASSISTANT: To create a new file `core/src/Operators.hs` and update the `core/nhcore.cabal` file to include this new module, follow these steps:\r\n\r\n1. Create the `core/src/Operators.hs` file with the necessary reexports.\r\n2. Update the `core/nhcore.cabal` file to include the `Operators` module in the `exposed-modules` section.\r\n\r\nHere are the *SEARCH/REPLACE blocks* for these changes:\r\n\r\ncore/src/Operators.hs\r\n```haskell\r\n<<<<<<< SEARCH\r\n=======\r\nmodule Operators (\r\n module Pipe,\r\n module Bool,\r\n) where\r\n\r\nimport Pipe\r\nimport Bool\r\n>>>>>>> REPLACE\r\n```\r\n\r\ncore/nhcore.cabal\r\n```haskell\r\n<<<<<<< SEARCH\r\n Array\r\n=======\r\n Array,\r\n Operators\r\n>>>>>>> REPLACE\r\n```\r\n\r\nThis will create the `Operators.hs` file with reexports of all operators defined in the core, specifically from the `Pipe` and `Bool` modules, and update the cabal file to expose the `Operators` module.\r\n\r\n* aider: Update `handleCommand` function to take a `services` record as its first parameter, the `command` as its second parameter, and to return a `Promise Void`.\r\n\r\n# Aider chat conversation:\r\n\r\nUSER: Ensure that all types defined in core/src are reexported in `core/src/Core.hs` (only the types, not their constructors)\r\n\r\nASSISTANT: To ensure that all types defined in `core/src` are reexported in `core/src/Core.hs`, we need to modify the `Core.hs` file to include the types from the modules. We will add the types without their constructors to the export list of the `Core` module.\r\n\r\nHere are the *SEARCH/REPLACE* blocks for the `core/src/Core.hs` file:\r\n\r\ncore/src/Core.hs\r\n```haskell\r\n<<<<<<< SEARCH\r\nmodule Core (\r\n module Reexported,\r\n) where\r\n\r\nimport Console as Reexported\r\nimport HaskellCompatibility.IO as Reexported (MainFunction)\r\nimport Types as Reexported\r\n=======\r\nmodule Core (\r\n module Reexported,\r\n -- Types\r\n Array,\r\n Bool,\r\n Char,\r\n Command,\r\n Event,\r\n Int,\r\n Promise,\r\n Result,\r\n State,\r\n Str,\r\n Void,\r\n) where\r\n\r\nimport Array (Array)\r\nimport Bool (Bool)\r\nimport Char (Char)\r\nimport Console as Reexported\r\nimport HaskellCompatibility.IO as Reexported (MainFunction)\r\nimport Int (Int)\r\nimport Neo (Command, Event, State)\r\nimport Promise (Promise)\r\nimport Result (Result)\r\nimport Str (Str)\r\nimport Types as Reexported\r\nimport Void (Void)\r\n>>>>>>> REPLACE\r\n```\r\n\r\nThis change adds the types `Array`, `Bool`, `Char`, `Command`,\r\n^C KeyboardInterrupt\r\n\r\nUSER: Ensure that all types defined in core/src are reexported in `core/src/Types.hs` (only the types, not their constructors)\r\n\r\nASSISTANT: To ensure that all types defined in `core/src` are reexported in `core/src/Types.hs`, we need to modify the `Types.hs` file to include the types from the modules. We will add the types without their constructors to the export list of the `Types` module.\r\n\r\nHere are the *SEARCH/REPLACE* blocks for the `core/src/Types.hs` file:\r\n\r\ncore/src/Types.hs\r\n```haskell\r\n<<<<<<< SEARCH\r\nmodule Types (\r\n module Reexported,\r\n) where\r\n\r\nimport Array as Reexported (Array)\r\nimport Char as Reexported (Char)\r\nimport Int as Reexported (Int)\r\nimport Promise as Reexported (Promise)\r\nimport Result as Reexported (Result)\r\nimport Str as Reexported (Str)\r\nimport Void as Reexported (Void)\r\n=======\r\nmodule Types (\r\n -- Types\r\n Array,\r\n Bool,\r\n Char,\r\n Command,\r\n Event,\r\n Int,\r\n Promise,\r\n Result,\r\n State,\r\n Str,\r\n Void,\r\n) where\r\n\r\nimport Array (Array)\r\nimport Bool (Bool)\r\nimport Char (Char)\r\nimport Int (Int)\r\nimport Neo (Command, Event, State)\r\nimport Promise (Promise)\r\nimport Result (Result)\r\nimport Str (Str)\r\nimport Void (Void)\r\n>>>>>>> REPLACE\r\n```\r\n\r\nThis change adds the types `Bool`, `Command`, `Event`, `State` to\r\n^C KeyboardInterrupt\r\n\r\nUSER: Lets make `handleCommand` to be a function which first parameter is the record of services that the user has configured for their application (these services can be things like DatabaseService, StripeService, or whatever they define), then its second parameter would be the command itself, and it wouldn't receive more parameters. The result type is `Promise Void`\r\n\r\nASSISTANT: To modify the `handleCommand` function in the `cli/src/Neo.hs` file according to the new specification, we need to change its signature and return type. The first parameter will be a record of services, the second parameter will be the command, and it will return a `Promise Void`.\r\n\r\nHere is the *SEARCH/REPLACE* block for the `cli/src/Neo.hs` file:\r\n\r\ncli/src/Neo.hs\r\n```haskell\r\n<<<<<<< SEARCH\r\n-- | Function to handle commands and register events.\r\nhandleCommand :: Command -> State -> (State, Array Event)\r\nhandleCommand command state =\r\n -- Implement command handling and event registration here\r\n (state, Array.empty)\r\n=======\r\n-- | Function to handle commands using the configured services.\r\nhandleCommand :: services -> Command -> Promise Void\r\nhandleCommand services command =\r\n -- Implement command handling using the services here\r\n todo\r\n>>>>>>> REPLACE\r\n```\r\n\r\nThis change updates the `handleCommand` function to take a `services` record as its first parameter, the `command` as its second parameter, and to return a `Promise Void`. The body of the function is replaced with a call to `todo`, which is a placeholder indicating that the implementation is not yet provided.\r\n\r\n* aider: Expose `todo` in `core/src/Core.hs`.\r\n\r\n# Aider chat conversation:\r\n\r\nUSER: Expose `todo` in `core/src/Core.hs`\r\n\r\nASSISTANT: To expose `todo` in `core/src/Core.hs`, we need to add it to the export list of the `Core` module. Here is the *SEARCH/REPLACE* block for the `core/src/Core.hs` file:\r\n\r\ncore/src/Core.hs\r\n```haskell\r\n<<<<<<< SEARCH\r\nmodule Core (\r\n module Reexported,\r\n) where\r\n\r\nimport Console as Reexported\r\nimport HaskellCompatibility.IO as Reexported (MainFunction)\r\nimport Types as Reexported\r\n=======\r\nmodule Core (\r\n module Reexported,\r\n todo,\r\n) where\r\n\r\nimport Console as Reexported\r\nimport Debug as Reexported (todo)\r\nimport HaskellCompatibility.IO as Reexported (MainFunction)\r\nimport Types as Reexported\r\n>>>>>>> REPLACE\r\n```\r\n\r\nThis change adds `todo` to the export list of the `Core` module and ensures that it is imported from the `Debug` module.\r\n\r\n* Add OverloadedLists, OverloadedRecordDot, OverloadedRecordUpdate, RebindableSyntax, and NamedFieldPuns to nhcore.cabal.\r\n\r\n* aider: Create `core/src/Record.hs` file with reexports of `GHC.Record.getField` and `setField`, and update `core/nhcore.cabal` to include this new module.\r\n\r\n# Aider chat conversation:\r\n\r\nASSISTANT: To create a new `core/src/Record.hs` file that reexports `GHC.Record.getField` and `setField`, and to update the `core/nhcore.cabal` file to include this new module, follow these steps:\r\n\r\n1. Create the `core/src/Record.hs` file with the necessary reexports.\r\n2. Update the `core/nhcore.cabal` file to include the `Record` module in the `exposed-modules` section.\r\n\r\nHere are the *SEARCH/REPLACE* blocks for the new file and the update to the cabal file:\r\n\r\ncore/src/Record.hs\r\n```haskell\r\n<<<<<<< SEARCH\r\n=======\r\nmodule Record (\r\n getField,\r\n setField,\r\n) where\r\n\r\nimport GHC.Records (getField, setField)\r\n>>>>>>> REPLACE\r\n```\r\n\r\ncore/nhcore.cabal\r\n```haskell\r\n<<<<<<< SEARCH\r\n Operators\r\n=======\r\n Operators,\r\n Record\r\n>>>>>>> REPLACE\r\n```\r\n\r\nThis will create the new `Record.hs` file with the specified reexports and update the cabal file to expose the `Record` module.\r\n\r\n* Removed the `todo` function from the `Core` module.\r\n\r\n* aider: Add `Record` module to the export list of `Core` module in `core/src/Core.hs`.\r\n\r\n# Aider chat conversation:\r\n\r\nASSISTANT: To reexport the `Record` module from `core/src/Core.hs`, we need to add it to the export list of the `Core` module. Here is the *SEARCH/REPLACE block* for the `core/src/Core.hs` file:\r\n\r\ncore/src/Core.hs\r\n```haskell\r\n<<<<<<< SEARCH\r\nmodule Core (\r\n module Reexported,\r\n) where\r\n\r\nimport Console as Reexported\r\nimport Debug as Reexported (todo)\r\nimport HaskellCompatibility.IO as Reexported (MainFunction)\r\nimport Types as Reexported\r\n=======\r\nmodule Core (\r\n module Reexported,\r\n module Record,\r\n) where\r\n\r\nimport Console as Reexported\r\nimport Debug as Reexported (todo)\r\nimport HaskellCompatibility.IO as Reexported (MainFunction)\r\nimport Types as Reexported\r\nimport Record\r\n>>>>>>> REPLACE\r\n```\r\n\r\n* aider: Remove the OverloadedRecordUpdate and RebindableSyntax extensions from the cabal files.\r\n\r\n# Aider chat conversation:\r\n\r\nUSER: Remove the OverloadedRecordUpdate and RebindableSyntax extensions from the cabal files\r\n\r\nASSISTANT: To remove the `OverloadedRecordUpdate` and `RebindableSyntax` extensions from the `cabal` file, we need to modify the `core/nhcore.cabal` file. Here is the *SEARCH/REPLACE block* for the `core/nhcore.cabal` file:\r\n\r\ncore/nhcore.cabal\r\n```haskell\r\n<<<<<<< SEARCH\r\n default-extensions:\r\n BlockArguments\r\n NoImplicitPrelude\r\n TemplateHaskell\r\n QuasiQuotes\r\n ImportQualifiedPost\r\n OverloadedStrings\r\n OverloadedLists\r\n OverloadedRecordDot\r\n OverloadedRecordUpdate\r\n -- Required for OverloadedRecordUpdate\r\n RebindableSyntax\r\n=======\r\n default-extensions:\r\n BlockArguments\r\n NoImplicitPrelude\r\n TemplateHaskell\r\n QuasiQuotes\r\n ImportQualifiedPost\r\n OverloadedStrings\r\n OverloadedLists\r\n OverloadedRecordDot\r\n>>>>>>> REPLACE\r\n```\r\n\r\nThis change will remove the `OverloadedRecordUpdate` and `RebindableSyntax` extensions from the list of default extensions in the `core/nhcore.cabal` file.\r\n\r\n* Added OverloadedLists, OverloadedRecordDot, OverloadedRecordUpdate, RebindableSyntax, and NamedFieldPuns extensions and exposed Neo.Repl module.\r\n\r\n* aider: Remove `OverloadedRecordUpdate` and `RebindableSyntax` extensions from `cli/nhcli.cabal`.\r\n\r\n# Aider chat conversation:\r\n\r\nASSISTANT: To remove the `OverloadedRecordUpdate` and `RebindableSyntax` extensions from the `cli/nhcli.cabal` file, we need to modify the file accordingly. Here is the *SEARCH/REPLACE block* for the `cli/nhcli.cabal` file:\r\n\r\ncli/nhcli.cabal\r\n```haskell\r\n<<<<<<< SEARCH\r\n default-extensions:\r\n BlockArguments\r\n NoImplicitPrelude\r\n TemplateHaskell\r\n QuasiQuotes\r\n ImportQualifiedPost\r\n OverloadedStrings\r\n OverloadedLists\r\n OverloadedRecordDot\r\n OverloadedRecordUpdate\r\n -- Required for OverloadedRecordUpdate\r\n RebindableSyntax\r\n=======\r\n default-extensions:\r\n BlockArguments\r\n NoImplicitPrelude\r\n TemplateHaskell\r\n QuasiQuotes\r\n ImportQualifiedPost\r\n OverloadedStrings\r\n OverloadedLists\r\n OverloadedRecordDot\r\n>>>>>>> REPLACE\r\n```\r\n\r\nThis change will remove the `OverloadedRecordUpdate` and `RebindableSyntax` extensions from the list of default extensions in the `cli/nhcli.cabal` file.\r\n\r\n* aider: Add the `Operators` module to the list of reexported modules in `core/src/Core.hs`.\r\n\r\n# Aider chat conversation:\r\n\r\nUSER: ensure that the operators module is reexported in `core/src/Core.hs`\r\n\r\nASSISTANT: To reexport the `Operators` module in `core/src/Core.hs`, we need to add it to the export list. Here is the *SEARCH/REPLACE block* for the `core/src/Core.hs` file:\r\n\r\ncore/src/Core.hs\r\n```haskell\r\n<<<<<<< SEARCH\r\nmodule Core (\r\n module Reexported,\r\n module Record,\r\n) where\r\n\r\nimport Console as Reexported\r\nimport Debug as Reexported (todo)\r\nimport HaskellCompatibility.IO as Reexported (MainFunction)\r\nimport Types as Reexported\r\nimport Record\r\n=======\r\nmodule Core (\r\n module Reexported,\r\n module Record,\r\n module Operators,\r\n) where\r\n\r\nimport Console as Reexported\r\nimport Debug as Reexported (todo)\r\nimport HaskellCompatibility.IO as Reexported (MainFunction)\r\nimport Types as Reexported\r\nimport Record\r\nimport Operators\r\n>>>>>>> REPLACE\r\n```\r\n\r\nThis change will add the `Operators` module to the list of reexported modules in `core/src/Core.hs`.\r\n\r\n* Add repl stuff\r\n\r\n* Init flux\r\n\r\n* Add view module\r\n\r\n* Cleanup syntax\r\n\r\n* Dsl compatibility\r\n\r\n* Update\r\n\r\n* Better organization\r\n\r\n* Fix stuff\r\n\r\n* Add space in records\r\n\r\n* Add kinds and generic\r\n\r\n* Fix\r\n\r\n* Tinkering with JSON\r\n\r\n* Boop\r\n\r\n* Bump\r\n\r\n* Bleep\r\n\r\n* Work on schema\r\n\r\n* WIP: Schema and reflection\r\n\r\n* Woop\r\n\r\n* Boom, maps!\r\n\r\n* Wip\r\n\r\n* Schema compiles\r\n\r\n* Wip compatibility with Functor, Applicative and Monad\r\n\r\n* Compiles\r\n\r\n* Remove dhall dependency\r\n\r\n* Fix compilation\r\n\r\n* Bloop\r\n\r\n* Try schema\r\n\r\n* Remove DSLs\r\n\r\n* Begin with optparse conversion\r\n\r\n* wip\r\n\r\n* Meh\r\n\r\n* Add devenv\r\n\r\n* aaa\r\n\r\n* update\r\n\r\n* Compile\r\n\r\n* Start CLI codec\r\n\r\n* Todo\r\n\r\n* ApplicativeDo\r\n\r\n* Remove unused stuff\r\n\r\n* update\r\n\r\n* upd\r\n\r\n* Update\r\n\r\n* upd\r\n\r\n* upd\r\n\r\n* upd\r\n\r\n* Update\r\n\r\n* blah\r\n\r\n* upd\r\n\r\n* wip\r\n\r\n* Delete stuff, start fixing\r\n\r\n* Remove more stuff and polish compilation\r\n\r\n* More updates\r\n\r\n* Update to 9.6\r\n\r\n* Update\r\n\r\n* Apply suggestions from code review\r\n\r\nCo-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>\r\n\r\n---------\r\n\r\nCo-authored-by: Nikita Tchayka \r\nCo-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>","shortMessageHtmlLink":"v0.1.0 - Barebones Core Library (#81)"}},{"before":"a078d27703e3de6281aca2f5c3e0a01076177d8c","after":"9851b68b29328f07a4552549b9853fc0c4c15c8c","ref":"refs/heads/schema-poc","pushedAt":"2024-05-19T15:40:17.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"NickSeagull","name":"Nick Seagull","path":"/NickSeagull","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/7448243?s=80&v=4"},"commit":{"message":"Apply suggestions from code review\n\nCo-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>","shortMessageHtmlLink":"Apply suggestions from code review"}},{"before":"2db5fc3852dfd6aeb789744d4e51afbdbe981971","after":"a078d27703e3de6281aca2f5c3e0a01076177d8c","ref":"refs/heads/schema-poc","pushedAt":"2024-05-19T14:47:39.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"NickSeagull","name":"Nick Seagull","path":"/NickSeagull","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/7448243?s=80&v=4"},"commit":{"message":"Update","shortMessageHtmlLink":"Update"}},{"before":"5051850e274f94d655c0310f21e8201a4609e818","after":"2db5fc3852dfd6aeb789744d4e51afbdbe981971","ref":"refs/heads/schema-poc","pushedAt":"2024-05-18T14:30:54.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"NickSeagull","name":"Nick Seagull","path":"/NickSeagull","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/7448243?s=80&v=4"},"commit":{"message":"Update to 9.6","shortMessageHtmlLink":"Update to 9.6"}},{"before":"30c98a9628a4bd8fae6027225d3b26e67417b82d","after":"5051850e274f94d655c0310f21e8201a4609e818","ref":"refs/heads/schema-poc","pushedAt":"2024-05-18T14:08:23.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"NickSeagull","name":"Nick Seagull","path":"/NickSeagull","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/7448243?s=80&v=4"},"commit":{"message":"More updates","shortMessageHtmlLink":"More updates"}},{"before":"e9945524eea6e7b607304fc18f04331381de41af","after":"30c98a9628a4bd8fae6027225d3b26e67417b82d","ref":"refs/heads/schema-poc","pushedAt":"2024-05-17T18:43:33.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"NickSeagull","name":"Nick Seagull","path":"/NickSeagull","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/7448243?s=80&v=4"},"commit":{"message":"Remove more stuff and polish compilation","shortMessageHtmlLink":"Remove more stuff and polish compilation"}},{"before":"8cd540e3407dafec7b0955b4585174526085ef41","after":"e9945524eea6e7b607304fc18f04331381de41af","ref":"refs/heads/schema-poc","pushedAt":"2024-05-13T21:22:18.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"NickSeagull","name":"Nick Seagull","path":"/NickSeagull","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/7448243?s=80&v=4"},"commit":{"message":"Delete stuff, start fixing","shortMessageHtmlLink":"Delete stuff, start fixing"}},{"before":"5af68b67f14d8626b3f7bd49aa60da8146b1502d","after":"8cd540e3407dafec7b0955b4585174526085ef41","ref":"refs/heads/schema-poc","pushedAt":"2024-05-13T20:39:38.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"NickSeagull","name":"Nick Seagull","path":"/NickSeagull","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/7448243?s=80&v=4"},"commit":{"message":"wip","shortMessageHtmlLink":"wip"}},{"before":"4c166d7f8bfe061afc9ca57f3ad1fae6deba7f2d","after":"5af68b67f14d8626b3f7bd49aa60da8146b1502d","ref":"refs/heads/schema-poc","pushedAt":"2024-05-05T18:53:18.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"NickSeagull","name":"Nick Seagull","path":"/NickSeagull","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/7448243?s=80&v=4"},"commit":{"message":"upd","shortMessageHtmlLink":"upd"}},{"before":"ade7599e0f1a464e266221cbe94337f1043ede8a","after":"4c166d7f8bfe061afc9ca57f3ad1fae6deba7f2d","ref":"refs/heads/schema-poc","pushedAt":"2024-05-04T21:42:42.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"NickSeagull","name":"Nick Seagull","path":"/NickSeagull","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/7448243?s=80&v=4"},"commit":{"message":"blah","shortMessageHtmlLink":"blah"}},{"before":"2a00e88e46813020687ddb0eb75a03a30e5c684d","after":"ade7599e0f1a464e266221cbe94337f1043ede8a","ref":"refs/heads/schema-poc","pushedAt":"2024-04-14T20:30:33.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"NickSeagull","name":"Nick Seagull","path":"/NickSeagull","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/7448243?s=80&v=4"},"commit":{"message":"Update","shortMessageHtmlLink":"Update"}},{"before":"221d6d43d6e7539df4d00a5468e1f4f9abd97f75","after":"2a00e88e46813020687ddb0eb75a03a30e5c684d","ref":"refs/heads/schema-poc","pushedAt":"2024-04-14T14:18:38.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"NickSeagull","name":"Nick Seagull","path":"/NickSeagull","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/7448243?s=80&v=4"},"commit":{"message":"upd","shortMessageHtmlLink":"upd"}},{"before":"71c21eb0e295cde445e3f780f1594502a977c9e1","after":"221d6d43d6e7539df4d00a5468e1f4f9abd97f75","ref":"refs/heads/schema-poc","pushedAt":"2024-04-14T13:34:57.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"NickSeagull","name":"Nick Seagull","path":"/NickSeagull","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/7448243?s=80&v=4"},"commit":{"message":"upd","shortMessageHtmlLink":"upd"}},{"before":"5520a4b4c1c32e99c5546cd07848c88c55fb3675","after":"71c21eb0e295cde445e3f780f1594502a977c9e1","ref":"refs/heads/schema-poc","pushedAt":"2024-04-14T13:21:29.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"NickSeagull","name":"Nick Seagull","path":"/NickSeagull","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/7448243?s=80&v=4"},"commit":{"message":"upd","shortMessageHtmlLink":"upd"}},{"before":"ab13dc127ee1b9824cba5f4ecf696cd3b8e88207","after":"5520a4b4c1c32e99c5546cd07848c88c55fb3675","ref":"refs/heads/schema-poc","pushedAt":"2024-04-14T12:45:24.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"NickSeagull","name":"Nick Seagull","path":"/NickSeagull","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/7448243?s=80&v=4"},"commit":{"message":"Update","shortMessageHtmlLink":"Update"}},{"before":"14b86938dab07f2b9ab15880c69cb22e984c8f84","after":"ab13dc127ee1b9824cba5f4ecf696cd3b8e88207","ref":"refs/heads/schema-poc","pushedAt":"2024-04-12T16:24:34.000Z","pushType":"push","commitsCount":2,"pusher":{"login":"NickSeagull","name":"Nick Seagull","path":"/NickSeagull","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/7448243?s=80&v=4"},"commit":{"message":"upd","shortMessageHtmlLink":"upd"}},{"before":"0d954f9238a9b393d2f1f0a7c80e18ac634f875a","after":"14b86938dab07f2b9ab15880c69cb22e984c8f84","ref":"refs/heads/schema-poc","pushedAt":"2024-03-30T20:53:53.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"NickSeagull","name":"Nick Seagull","path":"/NickSeagull","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/7448243?s=80&v=4"},"commit":{"message":"Remove unused stuff","shortMessageHtmlLink":"Remove unused stuff"}},{"before":"8b8ccd23c2d0072bc9a7bf299107bcd5aba5a9e2","after":"0d954f9238a9b393d2f1f0a7c80e18ac634f875a","ref":"refs/heads/schema-poc","pushedAt":"2024-03-30T11:19:01.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"NickSeagull","name":"Nick Seagull","path":"/NickSeagull","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/7448243?s=80&v=4"},"commit":{"message":"ApplicativeDo","shortMessageHtmlLink":"ApplicativeDo"}},{"before":"70c7717c84c61108756881e8b60b79c98f34bc1c","after":"8b8ccd23c2d0072bc9a7bf299107bcd5aba5a9e2","ref":"refs/heads/schema-poc","pushedAt":"2024-03-29T10:11:51.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"NickSeagull","name":"Nick Seagull","path":"/NickSeagull","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/7448243?s=80&v=4"},"commit":{"message":"Todo","shortMessageHtmlLink":"Todo"}},{"before":"c53e32b07b9bba836ba5db031094acc064b923a6","after":"70c7717c84c61108756881e8b60b79c98f34bc1c","ref":"refs/heads/schema-poc","pushedAt":"2024-03-28T22:15:18.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"NickSeagull","name":"Nick Seagull","path":"/NickSeagull","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/7448243?s=80&v=4"},"commit":{"message":"Start CLI codec","shortMessageHtmlLink":"Start CLI codec"}},{"before":"04d5e062ce1e4481ae55a8520af7488020c490fc","after":"c53e32b07b9bba836ba5db031094acc064b923a6","ref":"refs/heads/schema-poc","pushedAt":"2024-03-27T14:27:56.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"NickSeagull","name":"Nick Seagull","path":"/NickSeagull","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/7448243?s=80&v=4"},"commit":{"message":"Compile","shortMessageHtmlLink":"Compile"}},{"before":"307bc326382612a40cf061ed95e1ea4c4a288bf4","after":"92acf397c9ed46caa3f86000146b7754034f3caf","ref":"refs/heads/dawn","pushedAt":"2024-03-27T14:10:53.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"NickSeagull","name":"Nick Seagull","path":"/NickSeagull","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/7448243?s=80&v=4"},"commit":{"message":"Wip","shortMessageHtmlLink":"Wip"}},{"before":"4943f8c1d10885896ff1b8727a5942a51a30cb06","after":"307bc326382612a40cf061ed95e1ea4c4a288bf4","ref":"refs/heads/dawn","pushedAt":"2024-03-26T11:18:16.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"NickSeagull","name":"Nick Seagull","path":"/NickSeagull","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/7448243?s=80&v=4"},"commit":{"message":"Add devenv","shortMessageHtmlLink":"Add devenv"}},{"before":"0af00e9dbaa204a553964c66b15960dc5d3ed8a5","after":"04d5e062ce1e4481ae55a8520af7488020c490fc","ref":"refs/heads/schema-poc","pushedAt":"2024-03-26T11:15:37.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"NickSeagull","name":"Nick Seagull","path":"/NickSeagull","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/7448243?s=80&v=4"},"commit":{"message":"update","shortMessageHtmlLink":"update"}},{"before":"ceb16a41aeafca8b2ac7a99b07143199bb5b78cf","after":"0af00e9dbaa204a553964c66b15960dc5d3ed8a5","ref":"refs/heads/schema-poc","pushedAt":"2024-03-24T00:44:28.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"NickSeagull","name":"Nick Seagull","path":"/NickSeagull","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/7448243?s=80&v=4"},"commit":{"message":"aaa","shortMessageHtmlLink":"aaa"}},{"before":"0f208ee41d86f50e0223a18625cd282688fbfdab","after":"ceb16a41aeafca8b2ac7a99b07143199bb5b78cf","ref":"refs/heads/schema-poc","pushedAt":"2024-03-23T23:19:08.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"NickSeagull","name":"Nick Seagull","path":"/NickSeagull","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/7448243?s=80&v=4"},"commit":{"message":"Add devenv","shortMessageHtmlLink":"Add devenv"}},{"before":"dd4ac4391ec9e1557c3b96ce15c662fbd90becca","after":"0f208ee41d86f50e0223a18625cd282688fbfdab","ref":"refs/heads/schema-poc","pushedAt":"2024-03-10T22:11:53.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"NickSeagull","name":"Nick Seagull","path":"/NickSeagull","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/7448243?s=80&v=4"},"commit":{"message":"Meh","shortMessageHtmlLink":"Meh"}},{"before":"b8c876b365e0381ad1448a458ed502aa2695d8dd","after":"dd4ac4391ec9e1557c3b96ce15c662fbd90becca","ref":"refs/heads/schema-poc","pushedAt":"2024-03-10T21:44:35.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"NickSeagull","name":"Nick Seagull","path":"/NickSeagull","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/7448243?s=80&v=4"},"commit":{"message":"wip","shortMessageHtmlLink":"wip"}},{"before":"12b7bb6b20cc6cad3b87517cf818440c8ee1a8d6","after":"b8c876b365e0381ad1448a458ed502aa2695d8dd","ref":"refs/heads/schema-poc","pushedAt":"2024-03-10T17:03:19.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"NickSeagull","name":"Nick Seagull","path":"/NickSeagull","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/7448243?s=80&v=4"},"commit":{"message":"Begin with optparse conversion","shortMessageHtmlLink":"Begin with optparse conversion"}}],"hasNextPage":true,"hasPreviousPage":false,"activityType":"all","actor":null,"timePeriod":"all","sort":"DESC","perPage":30,"cursor":"djE6ks8AAAAEVFc5dAA","startCursor":null,"endCursor":null}},"title":"Activity ยท neohaskell/NeoHaskell"}