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 +6/−0
- haskell-to-elm.cabal +10/−4
- src/Language/Haskell/To/Elm.hs +167/−5
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 =