composite-aeson-cofree-list (empty) → 0.1.0.0
raw patch · 5 files changed
+88/−0 lines, 5 filesdep +aesondep +basedep +composite-aeson
Dependencies added: aeson, base, composite-aeson, composite-aeson-writeonly, free, vector
Files
- ChangeLog.md +5/−0
- LICENSE +19/−0
- README.md +3/−0
- composite-aeson-cofree-list.cabal +36/−0
- src/Composite/Aeson/Format/CofreeList.hs +25/−0
+ ChangeLog.md view
@@ -0,0 +1,5 @@+# Changelog for composite-aeson-cofree-list++# (v0.1.0.0)++* Add write only `cofreeListJsonFormat` function.
+ LICENSE view
@@ -0,0 +1,19 @@+Copyright (c) 2020 Daniel Firth++Permission is hereby granted, free of charge, to any person obtaining a copy+of this software and associated documentation files (the "Software"), to deal+in the Software without restriction, including without limitation the rights+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell+copies of the Software, and to permit persons to whom the Software is+furnished to do so, subject to the following conditions:++The above copyright notice and this permission notice shall be included in all+copies or substantial portions of the Software.++THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE+SOFTWARE.
+ README.md view
@@ -0,0 +1,3 @@+# composite-aeson-cofree-list++Write a `Cofree []` as a JSON value with "head" and "tail" keys.
+ composite-aeson-cofree-list.cabal view
@@ -0,0 +1,36 @@+cabal-version: 1.12++-- This file has been generated from package.yaml by hpack version 0.34.2.+--+-- see: https://github.com/sol/hpack++name: composite-aeson-cofree-list+version: 0.1.0.0+synopsis: Print a Cofree [] as a JSON value.+description: Print a Cofree [] as a JSON value.+category: Text+author: Daniel Firth+maintainer: dan.firth@homotopic.tech+copyright: 2020 Daniel Firth+license: MIT+license-file: LICENSE+build-type: Simple+extra-source-files:+ README.md+ ChangeLog.md++library+ exposed-modules:+ Composite.Aeson.Format.CofreeList+ other-modules:+ Paths_composite_aeson_cofree_list+ hs-source-dirs:+ src+ build-depends:+ aeson+ , base >=4.7 && <5+ , composite-aeson+ , composite-aeson-writeonly+ , free+ , vector+ default-language: Haskell2010
+ src/Composite/Aeson/Format/CofreeList.hs view
@@ -0,0 +1,25 @@+{- |+ Module : Composite.Aeson.Format.CofreeList+ License : MIT+ Stability : experimental++Format a Cofree [] as a JSON value with "head", "tail" keys.+-}+{-# LANGUAGE OverloadedStrings #-}+module Composite.Aeson.Format.CofreeList (+ cofreeListJsonFormat+) where++import Composite.Aeson+import Composite.Aeson.WriteOnly+import Control.Comonad.Cofree+import Data.Aeson as A+import Data.Vector as V++cofreeListJsonFormat :: JsonFormat e a -> JsonFormat e (Cofree [] a)+cofreeListJsonFormat f = writeOnlyJsonFormat p where+ p = \(x :< xs) -> object $ ["head" A..= toJsonWithFormat f x] <> (+ case xs of+ [] -> []+ _ -> ["tail" A..= Array (V.fromList $ p <$> xs) ]+ )