packages feed

haskell-to-elm 0.3.1.0 → 0.3.2.0

raw patch · 3 files changed

+183/−9 lines, 3 filesdep +vectordep ~elm-syntaxPVP: major bump suggested

API removals or changes: PVP suggests a major version bump

Dependencies added: vector

Dependency ranges changed: elm-syntax

API changes (from Hackage documentation)

- Language.Haskell.To.Elm: instance forall b (numParams :: GHC.Types.Nat) (f :: * -> b). Language.Haskell.To.Elm.DeriveParameterisedElmTypeDefinition (numParams GHC.TypeNats.+ 1) (f (Language.Haskell.To.Elm.Parameter numParams)) => Language.Haskell.To.Elm.DeriveParameterisedElmTypeDefinition numParams f
- Language.Haskell.To.Elm: instance forall k b (numParams :: GHC.Types.Nat) (value :: k) (f :: * -> b). Language.Haskell.To.Elm.DeriveParameterisedElmDecoderDefinition (numParams GHC.TypeNats.+ 1) value (f (Language.Haskell.To.Elm.Parameter numParams)) => Language.Haskell.To.Elm.DeriveParameterisedElmDecoderDefinition numParams value f
- Language.Haskell.To.Elm: instance forall k b (numParams :: GHC.Types.Nat) (value :: k) (f :: * -> b). Language.Haskell.To.Elm.DeriveParameterisedElmEncoderDefinition (numParams GHC.TypeNats.+ 1) value (f (Language.Haskell.To.Elm.Parameter numParams)) => Language.Haskell.To.Elm.DeriveParameterisedElmEncoderDefinition numParams value f
+ Language.Haskell.To.Elm: instance Language.Haskell.To.Elm.HasElmDecoder Data.Aeson.Types.Internal.Value GHC.Int.Int16
+ Language.Haskell.To.Elm: instance Language.Haskell.To.Elm.HasElmDecoder Data.Aeson.Types.Internal.Value GHC.Int.Int32
+ Language.Haskell.To.Elm: instance Language.Haskell.To.Elm.HasElmDecoder Data.Aeson.Types.Internal.Value GHC.Int.Int8
+ Language.Haskell.To.Elm: instance Language.Haskell.To.Elm.HasElmDecoder Data.Aeson.Types.Internal.Value GHC.Types.Float
+ Language.Haskell.To.Elm: instance Language.Haskell.To.Elm.HasElmDecoder Data.Aeson.Types.Internal.Value GHC.Word.Word16
+ Language.Haskell.To.Elm: instance Language.Haskell.To.Elm.HasElmDecoder Data.Aeson.Types.Internal.Value GHC.Word.Word32
+ Language.Haskell.To.Elm: instance Language.Haskell.To.Elm.HasElmDecoder Data.Aeson.Types.Internal.Value GHC.Word.Word8
+ Language.Haskell.To.Elm: instance Language.Haskell.To.Elm.HasElmDecoder Data.Aeson.Types.Internal.Value a => Language.Haskell.To.Elm.HasElmDecoder Data.Aeson.Types.Internal.Value (Data.Vector.Vector a)
+ Language.Haskell.To.Elm: instance Language.Haskell.To.Elm.HasElmEncoder Data.Aeson.Types.Internal.Value GHC.Int.Int16
+ Language.Haskell.To.Elm: instance Language.Haskell.To.Elm.HasElmEncoder Data.Aeson.Types.Internal.Value GHC.Int.Int32
+ Language.Haskell.To.Elm: instance Language.Haskell.To.Elm.HasElmEncoder Data.Aeson.Types.Internal.Value GHC.Int.Int8
+ Language.Haskell.To.Elm: instance Language.Haskell.To.Elm.HasElmEncoder Data.Aeson.Types.Internal.Value GHC.Types.Float
+ Language.Haskell.To.Elm: instance Language.Haskell.To.Elm.HasElmEncoder Data.Aeson.Types.Internal.Value GHC.Word.Word16
+ Language.Haskell.To.Elm: instance Language.Haskell.To.Elm.HasElmEncoder Data.Aeson.Types.Internal.Value GHC.Word.Word32
+ Language.Haskell.To.Elm: instance Language.Haskell.To.Elm.HasElmEncoder Data.Aeson.Types.Internal.Value GHC.Word.Word8
+ Language.Haskell.To.Elm: instance Language.Haskell.To.Elm.HasElmEncoder Data.Aeson.Types.Internal.Value a => Language.Haskell.To.Elm.HasElmEncoder Data.Aeson.Types.Internal.Value (Data.Vector.Vector a)
+ Language.Haskell.To.Elm: instance Language.Haskell.To.Elm.HasElmEncoder Data.Text.Internal.Text GHC.Int.Int16
+ Language.Haskell.To.Elm: instance Language.Haskell.To.Elm.HasElmEncoder Data.Text.Internal.Text GHC.Int.Int32
+ Language.Haskell.To.Elm: instance Language.Haskell.To.Elm.HasElmEncoder Data.Text.Internal.Text GHC.Int.Int8
+ Language.Haskell.To.Elm: instance Language.Haskell.To.Elm.HasElmEncoder Data.Text.Internal.Text GHC.Types.Float
+ Language.Haskell.To.Elm: instance Language.Haskell.To.Elm.HasElmEncoder Data.Text.Internal.Text GHC.Word.Word16
+ Language.Haskell.To.Elm: instance Language.Haskell.To.Elm.HasElmEncoder Data.Text.Internal.Text GHC.Word.Word32
+ Language.Haskell.To.Elm: instance Language.Haskell.To.Elm.HasElmEncoder Data.Text.Internal.Text GHC.Word.Word8
+ Language.Haskell.To.Elm: instance Language.Haskell.To.Elm.HasElmType GHC.Int.Int16
+ Language.Haskell.To.Elm: instance Language.Haskell.To.Elm.HasElmType GHC.Int.Int32
+ Language.Haskell.To.Elm: instance Language.Haskell.To.Elm.HasElmType GHC.Int.Int8
+ Language.Haskell.To.Elm: instance Language.Haskell.To.Elm.HasElmType GHC.Types.Float
+ Language.Haskell.To.Elm: instance Language.Haskell.To.Elm.HasElmType GHC.Word.Word16
+ Language.Haskell.To.Elm: instance Language.Haskell.To.Elm.HasElmType GHC.Word.Word32
+ Language.Haskell.To.Elm: instance Language.Haskell.To.Elm.HasElmType GHC.Word.Word8
+ Language.Haskell.To.Elm: instance Language.Haskell.To.Elm.HasElmType a => Language.Haskell.To.Elm.HasElmType (Data.Vector.Vector a)
+ Language.Haskell.To.Elm: instance forall (numParams :: GHC.Types.Nat) b (f :: * -> b). Language.Haskell.To.Elm.DeriveParameterisedElmTypeDefinition (numParams GHC.TypeNats.+ 1) (f (Language.Haskell.To.Elm.Parameter numParams)) => Language.Haskell.To.Elm.DeriveParameterisedElmTypeDefinition numParams f
+ Language.Haskell.To.Elm: instance forall k (numParams :: GHC.Types.Nat) (value :: k) b (f :: * -> b). Language.Haskell.To.Elm.DeriveParameterisedElmDecoderDefinition (numParams GHC.TypeNats.+ 1) value (f (Language.Haskell.To.Elm.Parameter numParams)) => Language.Haskell.To.Elm.DeriveParameterisedElmDecoderDefinition numParams value f
+ Language.Haskell.To.Elm: instance forall k (numParams :: GHC.Types.Nat) (value :: k) b (f :: * -> b). Language.Haskell.To.Elm.DeriveParameterisedElmEncoderDefinition (numParams GHC.TypeNats.+ 1) value (f (Language.Haskell.To.Elm.Parameter numParams)) => Language.Haskell.To.Elm.DeriveParameterisedElmEncoderDefinition numParams value f

Files

CHANGELOG.md view
@@ -2,6 +2,12 @@  ## Unreleased changes +## 0.3.2.0++- Fix support for the Aeson option `omitNothingFields`+- Add instances for some more numeric Haskell types: `Float`, `Int8`, `Int16`, `Int32`, `Word8`, `Word16`, and `Word32`+- Add instances for Elm `Array`s, which correspond to Haskell `Vector`s+ ## 0.3.1.0  - Generate correct JSON coders for record constructors for types with multiple constructors (https://github.com/folq/haskell-to-elm/issues/7)
haskell-to-elm.cabal view
@@ -1,13 +1,13 @@ cabal-version: 1.12 --- This file has been generated from package.yaml by hpack version 0.34.1.+-- This file has been generated from package.yaml by hpack version 0.34.3. -- -- see: https://github.com/sol/hpack ----- hash: fe23343d3ed509c0df894e027c919960fc7a515239ad623bba6e7e3cfbb9cd6e+-- hash: 6d0cc0620261f326ace9a05c03ea9574c7c4d9e535af48fa989eb0bf9411719e  name:           haskell-to-elm-version:        0.3.1.0+version:        0.3.2.0 synopsis:       Generate Elm types and JSON encoders and decoders from Haskell types description:    Please see the README on GitHub at <https://github.com/folq/haskell-to-elm#readme> category:       Elm, Compiler, Language@@ -18,7 +18,8 @@ copyright:      2019 Olle Fredriksson license:        BSD3 license-file:   LICENSE-tested-with:    GHC == 8.4.3, GHC == 8.6.5, GHC == 8.8.3+tested-with:+    GHC == 8.4.3, GHC == 8.6.5, GHC == 8.8.3 build-type:     Simple extra-source-files:     README.md@@ -50,6 +51,7 @@     , text >=1.2.0     , time >=1.8.0     , unordered-containers >=0.2.8+    , vector >=0.12   default-language: Haskell2010  executable deriving-via-example@@ -71,6 +73,7 @@     , text >=1.2.0     , time >=1.8.0     , unordered-containers >=0.2.8+    , vector >=0.12   if !flag(examples)     buildable: False   default-language: Haskell2010@@ -94,6 +97,7 @@     , text >=1.2.0     , time >=1.8.0     , unordered-containers >=0.2.8+    , vector >=0.12   if !flag(examples)     buildable: False   default-language: Haskell2010@@ -117,6 +121,7 @@     , text >=1.2.0     , time >=1.8.0     , unordered-containers >=0.2.8+    , vector >=0.12   if !flag(examples)     buildable: False   default-language: Haskell2010@@ -139,4 +144,5 @@     , text >=1.2.0     , time >=1.8.0     , unordered-containers >=0.2.8+    , vector >=0.12   default-language: Haskell2010
src/Language/Haskell/To/Elm.hs view
@@ -5,7 +5,6 @@ {-# language FlexibleContexts #-} {-# language FlexibleInstances #-} {-# language GADTs #-}-{-# language KindSignatures #-} {-# language MultiParamTypeClasses #-} {-# language OverloadedStrings #-} {-# language PartialTypeSignatures #-}@@ -22,13 +21,16 @@ import Data.Foldable import Data.HashMap.Lazy (HashMap) import qualified Data.HashMap.Lazy as HashMap+import qualified Data.Int as Int import qualified Data.Kind import Data.Maybe (catMaybes) import Data.Proxy import Data.String import Data.Text (Text) import Data.Time+import Data.Vector (Vector) import Data.Void+import qualified Data.Word as Word import qualified Generics.SOP as SOP import GHC.TypeLits @@ -605,10 +607,12 @@                 )               , ( Pattern.Con "Maybe.Just" [Pattern.Var 0]                 , Bound.toScope $-                  fmap Bound.F $-                  Expression.tuple-                    (jsonFieldName fname)-                    (Expression.App encoder (Expression.App (Expression.Proj $ elmField fname) e))+                  Expression.List+                  [ Bound.F <$>+                    Expression.tuple+                      (jsonFieldName fname)+                      (Expression.App encoder (Expression.App (Expression.Proj $ elmField fname) e))+                  ]                 )               ]             ]@@ -712,6 +716,8 @@  ------------- +-- Int+ instance HasElmType Int where   elmType =     "Basics.Int"@@ -724,6 +730,92 @@   elmDecoder =     "Json.Decode.int" +-- Int8++instance HasElmType Int.Int8 where+  elmType =+    "Basics.Int"++instance HasElmEncoder Aeson.Value Int.Int8 where+  elmEncoder =+    "Json.Encode.int"++instance HasElmDecoder Aeson.Value Int.Int8 where+  elmDecoder =+    "Json.Decode.int"++-- Int16++instance HasElmType Int.Int16 where+  elmType =+    "Basics.Int"++instance HasElmEncoder Aeson.Value Int.Int16 where+  elmEncoder =+    "Json.Encode.int"++instance HasElmDecoder Aeson.Value Int.Int16 where+  elmDecoder =+    "Json.Decode.int"++-- Int32++instance HasElmType Int.Int32 where+  elmType =+    "Basics.Int"++instance HasElmEncoder Aeson.Value Int.Int32 where+  elmEncoder =+    "Json.Encode.int"++instance HasElmDecoder Aeson.Value Int.Int32 where+  elmDecoder =+    "Json.Decode.int"++-- Word8++instance HasElmType Word.Word8 where+  elmType =+    "Basics.Int"++instance HasElmEncoder Aeson.Value Word.Word8 where+  elmEncoder =+    "Json.Encode.int"++instance HasElmDecoder Aeson.Value Word.Word8 where+  elmDecoder =+    "Json.Decode.int"++-- Word16++instance HasElmType Word.Word16 where+  elmType =+    "Basics.Int"++instance HasElmEncoder Aeson.Value Word.Word16 where+  elmEncoder =+    "Json.Encode.int"++instance HasElmDecoder Aeson.Value Word.Word16 where+  elmDecoder =+    "Json.Decode.int"++-- Word32++instance HasElmType Word.Word32 where+  elmType =+    "Basics.Int"++instance HasElmEncoder Aeson.Value Word.Word32 where+  elmEncoder =+    "Json.Encode.int"++instance HasElmDecoder Aeson.Value Word.Word32 where+  elmDecoder =+    "Json.Decode.int"++-- Double+ instance HasElmType Double where   elmType =     "Basics.Float"@@ -736,6 +828,22 @@   elmDecoder =     "Json.Decode.float" +-- Float++instance HasElmType Float where+  elmType =+    "Basics.Float"++instance HasElmEncoder Aeson.Value Float where+  elmEncoder =+    "Json.Encode.float"++instance HasElmDecoder Aeson.Value Float where+  elmDecoder =+    "Json.Decode.float"++-- Bool+ instance HasElmType Bool where   elmType =     "Basics.Bool"@@ -748,6 +856,8 @@   elmDecoder =     "Json.Decode.bool" +-- Text+ instance HasElmType Text where   elmType =     "String.String"@@ -768,10 +878,38 @@   elmEncoder =     "String.fromInt" +instance HasElmEncoder Text Int.Int8 where+  elmEncoder =+    "String.fromInt"++instance HasElmEncoder Text Int.Int16 where+  elmEncoder =+    "String.fromInt"++instance HasElmEncoder Text Int.Int32 where+  elmEncoder =+    "String.fromInt"++instance HasElmEncoder Text Word.Word8 where+  elmEncoder =+    "String.fromInt"++instance HasElmEncoder Text Word.Word16 where+  elmEncoder =+    "String.fromInt"++instance HasElmEncoder Text Word.Word32 where+  elmEncoder =+    "String.fromInt"+ instance HasElmEncoder Text Double where   elmEncoder =     "String.fromFloat" +instance HasElmEncoder Text Float where+  elmEncoder =+    "String.fromFloat"+ instance HasElmEncoder Aeson.Value Text where   elmEncoder =     "Json.Encode.string"@@ -780,6 +918,8 @@   elmDecoder =     "Json.Decode.string" +-- Char+ instance HasElmType Char where   elmType =     "Char.Char"@@ -804,6 +944,8 @@           ]       ) +-- UTCTime+ instance HasElmType UTCTime where   elmType =     "Time.Posix"@@ -816,6 +958,8 @@   elmDecoder =     "Iso8601.decoder" +-- Maybe+ instance HasElmEncoder a b => HasElmEncoder (Maybe a) (Maybe b) where   elmEncoder = Expression.App "Maybe.map" (elmEncoder @a @b) @@ -831,6 +975,22 @@   elmDecoder =     Expression.App "Json.Decode.nullable" (elmDecoder @Aeson.Value @a) +-- Vector++instance HasElmType a => HasElmType (Vector a) where+  elmType =+    Type.App "Array.Array" (elmType @a)++instance HasElmEncoder Aeson.Value a => HasElmEncoder Aeson.Value (Vector a) where+  elmEncoder =+    Expression.App "Json.Encode.array" (elmEncoder @Aeson.Value @a)++instance HasElmDecoder Aeson.Value a => HasElmDecoder Aeson.Value (Vector a) where+  elmDecoder =+    Expression.App "Json.Decode.array" (elmDecoder @Aeson.Value @a)++-- List+ instance HasElmType a => HasElmType [a] where   elmType =     Type.App "List.List" (elmType @a)@@ -842,6 +1002,8 @@ instance HasElmDecoder Aeson.Value a => HasElmDecoder Aeson.Value [a] where   elmDecoder =     Expression.App "Json.Decode.list" (elmDecoder @Aeson.Value @a)++-- Tuple  instance (HasElmType a, HasElmType b) => HasElmType (a, b) where   elmType =