diff --git a/elmental.cabal b/elmental.cabal
--- a/elmental.cabal
+++ b/elmental.cabal
@@ -2,7 +2,7 @@
 
 maintainer:         Gaël Deest
 name:               elmental
-version:            0.1.0.0
+version:            0.1.0.1
 
 license:            BSD-3-Clause
 synopsis: Generate Elm datatype definitions, encoders and decoders from Haskell datatypes.
@@ -16,6 +16,9 @@
 category:           Codegen
 
 extra-doc-files: CHANGELOG.md
+extra-source-files:
+  test-output/codegen/golden/*.txt
+  test-output/extraction/golden/*.txt
 source-repository head
   type: git
   location: https://github.com/gdeest/elmental.git
diff --git a/test-output/codegen/golden/SampleTypes.txt b/test-output/codegen/golden/SampleTypes.txt
new file mode 100644
--- /dev/null
+++ b/test-output/codegen/golden/SampleTypes.txt
@@ -0,0 +1,1688 @@
+################################################################################
+Codegen.Either: 
+################################################################################
+module Codegen.Either exposing (..)
+
+
+import Json.Encode
+import Json.Encode exposing (Value)
+import Json.Decode
+import Json.Decode exposing (Decoder)
+import Json.Decode.Extra exposing (andMap)
+
+
+type Either a0 a1
+  = Left a0
+  | Right a1
+
+encodeEither : (e0 -> Value) -> (e1 -> Value) -> (Either e0 e1) -> Value
+encodeEither e0 e1 v =
+  case v of
+    Left p0 -> Json.Encode.object
+      [ ( "tag", Json.Encode.string "Left" )
+      , ( "contents"
+        , e0 p0
+        )
+      ]
+    Right p0 -> Json.Encode.object
+      [ ( "tag", Json.Encode.string "Right" )
+      , ( "contents"
+        , e1 p0
+        )
+      ]
+
+decodeEither : Decoder a0 -> Decoder a1 -> Decoder (Either a0 a1)
+decodeEither d0 d1 =
+  let
+    decide : String -> Decoder (Either a0 a1)
+    decide tag =
+      case tag of
+        "Left" ->
+          Json.Decode.field "contents" <| Json.Decode.map Left d0
+        "Right" ->
+          Json.Decode.field "contents" <| Json.Decode.map Right d1
+        other ->
+          Json.Decode.fail <| "(Either a0 a1) doesn't have constructor: " ++ other
+  in
+  Json.Decode.field "tag" Json.Decode.string
+   |> Json.Decode.andThen decide
+################################################################################
+
+################################################################################
+Codegen.Report: 
+################################################################################
+module Codegen.Report exposing (..)
+
+import Json.Decode
+import Json.Encode
+import Json.Encode.Extra
+import Maybe
+import Json.Encode
+import Json.Encode exposing (Value)
+import Json.Decode
+import Json.Decode exposing (Decoder)
+import Json.Decode.Extra exposing (andMap)
+
+
+type Form 
+  = Form
+      { userName : (Maybe.Maybe String)
+      , upload : (Maybe.Maybe FileUpload)
+      }
+
+type FileUpload 
+  = FileUpload
+      { fileName : (Maybe.Maybe String)
+      }
+
+encodeForm : Form -> Value
+encodeForm v =
+  case v of
+    Form r ->
+      Json.Encode.object
+        [ ("userName", (Json.Encode.Extra.maybe (Json.Encode.string)) r.userName)
+        , ("upload", (Json.Encode.Extra.maybe (encodeFileUpload)) r.upload)
+        ]
+
+encodeFileUpload : FileUpload -> Value
+encodeFileUpload v =
+  case v of
+    FileUpload r ->
+      Json.Encode.object
+        [ ("fileName", (Json.Encode.Extra.maybe (Json.Encode.string)) r.fileName)
+        ]
+
+decodeForm : Decoder Form
+decodeForm  =
+  let mkFunction =
+        \userName upload ->
+          { userName = userName
+          , upload = upload
+          }
+      contentDecoder =
+        Json.Decode.succeed mkFunction
+          |> andMap (Json.Decode.field "userName" (Json.Decode.nullable Json.Decode.string))
+          |> andMap (Json.Decode.field "upload" (Json.Decode.nullable decodeFileUpload))
+  in Json.Decode.field "contents" (Json.Decode.map Form contentDecoder)
+
+decodeFileUpload : Decoder FileUpload
+decodeFileUpload  =
+  let mkFunction =
+        \fileName ->
+          { fileName = fileName
+          }
+      contentDecoder =
+        Json.Decode.succeed mkFunction
+          |> andMap (Json.Decode.field "fileName" (Json.Decode.nullable Json.Decode.string))
+  in Json.Decode.field "contents" (Json.Decode.map FileUpload contentDecoder)
+################################################################################
+
+################################################################################
+Codegen.SampleTypes: 
+################################################################################
+module Codegen.SampleTypes exposing (..)
+
+import Codegen.Either
+import Json.Decode
+import Json.Encode
+import Json.Encode.Extra
+import Maybe
+import Json.Encode
+import Json.Encode exposing (Value)
+import Json.Decode
+import Json.Decode exposing (Decoder)
+import Json.Decode.Extra exposing (andMap)
+
+
+type LargeRecord a0
+  = LargeRecord
+      { field0 : (LookMaNoPhantomParam a0)
+      , field1 : (LookMaNoPhantomParam a0)
+      , field2 : (LookMaNoPhantomParam a0)
+      , field3 : (LookMaNoPhantomParam a0)
+      , field4 : (LookMaNoPhantomParam a0)
+      , field5 : (LookMaNoPhantomParam a0)
+      , field6 : (LookMaNoPhantomParam a0)
+      , field7 : (LookMaNoPhantomParam a0)
+      , field8 : (LookMaNoPhantomParam a0)
+      , field9 : (LookMaNoPhantomParam a0)
+      , field10 : (LookMaNoPhantomParam a0)
+      , field11 : (LookMaNoPhantomParam a0)
+      , field12 : (LookMaNoPhantomParam a0)
+      , field13 : (LookMaNoPhantomParam a0)
+      , field14 : (LookMaNoPhantomParam a0)
+      , field15 : (LookMaNoPhantomParam a0)
+      , field16 : (LookMaNoPhantomParam a0)
+      , field17 : (LookMaNoPhantomParam a0)
+      , field18 : (LookMaNoPhantomParam a0)
+      , field19 : (LookMaNoPhantomParam a0)
+      , field20 : (LookMaNoPhantomParam a0)
+      , field21 : (LookMaNoPhantomParam a0)
+      , field22 : (LookMaNoPhantomParam a0)
+      , field23 : (LookMaNoPhantomParam a0)
+      , field24 : (LookMaNoPhantomParam a0)
+      , field25 : (LookMaNoPhantomParam a0)
+      , field26 : (LookMaNoPhantomParam a0)
+      , field27 : (LookMaNoPhantomParam a0)
+      , field28 : (LookMaNoPhantomParam a0)
+      , field29 : (LookMaNoPhantomParam a0)
+      , field30 : (LookMaNoPhantomParam a0)
+      , field31 : (LookMaNoPhantomParam a0)
+      , field32 : (LookMaNoPhantomParam a0)
+      , field33 : (LookMaNoPhantomParam a0)
+      , field34 : (LookMaNoPhantomParam a0)
+      , field35 : (LookMaNoPhantomParam a0)
+      , field36 : (LookMaNoPhantomParam a0)
+      , field37 : (LookMaNoPhantomParam a0)
+      , field38 : (LookMaNoPhantomParam a0)
+      , field39 : (LookMaNoPhantomParam a0)
+      , field40 : (LookMaNoPhantomParam a0)
+      , field41 : (LookMaNoPhantomParam a0)
+      , field42 : (LookMaNoPhantomParam a0)
+      , field43 : (LookMaNoPhantomParam a0)
+      , field44 : (LookMaNoPhantomParam a0)
+      , field45 : (LookMaNoPhantomParam a0)
+      , field46 : (LookMaNoPhantomParam a0)
+      , field47 : (LookMaNoPhantomParam a0)
+      , field48 : (LookMaNoPhantomParam a0)
+      , field49 : (LookMaNoPhantomParam a0)
+      , field50 : (LookMaNoPhantomParam a0)
+      , field51 : (LookMaNoPhantomParam a0)
+      , field52 : (LookMaNoPhantomParam a0)
+      , field53 : (LookMaNoPhantomParam a0)
+      , field54 : (LookMaNoPhantomParam a0)
+      , field55 : (LookMaNoPhantomParam a0)
+      , field56 : (LookMaNoPhantomParam a0)
+      , field57 : (LookMaNoPhantomParam a0)
+      , field58 : (LookMaNoPhantomParam a0)
+      , field59 : (LookMaNoPhantomParam a0)
+      , field60 : (LookMaNoPhantomParam a0)
+      , field61 : (LookMaNoPhantomParam a0)
+      , field62 : (LookMaNoPhantomParam a0)
+      , field63 : (LookMaNoPhantomParam a0)
+      , field64 : (LookMaNoPhantomParam a0)
+      , field65 : (LookMaNoPhantomParam a0)
+      , field66 : (LookMaNoPhantomParam a0)
+      , field67 : (LookMaNoPhantomParam a0)
+      , field68 : (LookMaNoPhantomParam a0)
+      , field69 : (LookMaNoPhantomParam a0)
+      , field70 : (LookMaNoPhantomParam a0)
+      , field71 : (LookMaNoPhantomParam a0)
+      , field72 : (LookMaNoPhantomParam a0)
+      , field73 : (LookMaNoPhantomParam a0)
+      , field74 : (LookMaNoPhantomParam a0)
+      , field75 : (LookMaNoPhantomParam a0)
+      , field76 : (LookMaNoPhantomParam a0)
+      , field77 : (LookMaNoPhantomParam a0)
+      , field78 : (LookMaNoPhantomParam a0)
+      , field79 : (LookMaNoPhantomParam a0)
+      , field80 : (LookMaNoPhantomParam a0)
+      , field81 : (LookMaNoPhantomParam a0)
+      , field82 : (LookMaNoPhantomParam a0)
+      , field83 : (LookMaNoPhantomParam a0)
+      , field84 : (LookMaNoPhantomParam a0)
+      , field85 : (LookMaNoPhantomParam a0)
+      , field86 : (LookMaNoPhantomParam a0)
+      , field87 : (LookMaNoPhantomParam a0)
+      , field88 : (LookMaNoPhantomParam a0)
+      , field89 : (LookMaNoPhantomParam a0)
+      , field90 : (LookMaNoPhantomParam a0)
+      , field91 : (LookMaNoPhantomParam a0)
+      , field92 : (LookMaNoPhantomParam a0)
+      , field93 : (LookMaNoPhantomParam a0)
+      , field94 : (LookMaNoPhantomParam a0)
+      , field95 : (LookMaNoPhantomParam a0)
+      , field96 : (LookMaNoPhantomParam a0)
+      , field97 : (LookMaNoPhantomParam a0)
+      , field98 : (LookMaNoPhantomParam a0)
+      , field99 : (LookMaNoPhantomParam a0)
+      }
+
+type RecordWithMultipleConstructors 
+  = FirstRecordConstructor
+      { foo : Bool
+      }
+  | SecondRecordConstructor
+      { bar : (Maybe.Maybe Int)
+      }
+
+type LookMaNoPhantomParam a0
+  = NatPhantomParameter (List a0)
+
+type HKTWithUnspecializedParams a0 a1
+  = HKTWithUnspecializedParams (Codegen.Either.Either Int (Codegen.Either.Either Int (Codegen.Either.Either Int a0))) a1
+
+type HKTWithSpecializedKindStarParams 
+  = HKTWithSpecializedKindStarParams String (Maybe.Maybe Int)
+
+type SimpleHKTMaybe 
+  = SimpleHKT (Maybe.Maybe String)
+
+type PolymorphicRecursiveType a0
+  = SPRTNil
+  | SPRTCons a0 (PolymorphicRecursiveType a0)
+
+type MonomorphicRecursiveType 
+  = SMRTNil
+  | SMRTCons Int MonomorphicRecursiveType
+
+type alias EmptyAlias =
+  {}
+
+type alias SimpleRecordAlias =
+  { name : (PolymorphicRecursiveType SimpleType)
+  , age : SimpleType
+  }
+
+type SimpleRecord 
+  = SimpleRecord
+      { name : (PolymorphicRecursiveType SimpleType)
+      , age : SimpleType
+      }
+
+type SimpleType 
+  = SimpleType Int
+
+encodeLargeRecord : (e0 -> Value) -> (LargeRecord e0) -> Value
+encodeLargeRecord e0 v =
+  case v of
+    LargeRecord r ->
+      Json.Encode.object
+        [ ("field0", (encodeNatPhantomParameter e0) r.field0)
+        , ("field1", (encodeNatPhantomParameter e0) r.field1)
+        , ("field2", (encodeNatPhantomParameter e0) r.field2)
+        , ("field3", (encodeNatPhantomParameter e0) r.field3)
+        , ("field4", (encodeNatPhantomParameter e0) r.field4)
+        , ("field5", (encodeNatPhantomParameter e0) r.field5)
+        , ("field6", (encodeNatPhantomParameter e0) r.field6)
+        , ("field7", (encodeNatPhantomParameter e0) r.field7)
+        , ("field8", (encodeNatPhantomParameter e0) r.field8)
+        , ("field9", (encodeNatPhantomParameter e0) r.field9)
+        , ("field10", (encodeNatPhantomParameter e0) r.field10)
+        , ("field11", (encodeNatPhantomParameter e0) r.field11)
+        , ("field12", (encodeNatPhantomParameter e0) r.field12)
+        , ("field13", (encodeNatPhantomParameter e0) r.field13)
+        , ("field14", (encodeNatPhantomParameter e0) r.field14)
+        , ("field15", (encodeNatPhantomParameter e0) r.field15)
+        , ("field16", (encodeNatPhantomParameter e0) r.field16)
+        , ("field17", (encodeNatPhantomParameter e0) r.field17)
+        , ("field18", (encodeNatPhantomParameter e0) r.field18)
+        , ("field19", (encodeNatPhantomParameter e0) r.field19)
+        , ("field20", (encodeNatPhantomParameter e0) r.field20)
+        , ("field21", (encodeNatPhantomParameter e0) r.field21)
+        , ("field22", (encodeNatPhantomParameter e0) r.field22)
+        , ("field23", (encodeNatPhantomParameter e0) r.field23)
+        , ("field24", (encodeNatPhantomParameter e0) r.field24)
+        , ("field25", (encodeNatPhantomParameter e0) r.field25)
+        , ("field26", (encodeNatPhantomParameter e0) r.field26)
+        , ("field27", (encodeNatPhantomParameter e0) r.field27)
+        , ("field28", (encodeNatPhantomParameter e0) r.field28)
+        , ("field29", (encodeNatPhantomParameter e0) r.field29)
+        , ("field30", (encodeNatPhantomParameter e0) r.field30)
+        , ("field31", (encodeNatPhantomParameter e0) r.field31)
+        , ("field32", (encodeNatPhantomParameter e0) r.field32)
+        , ("field33", (encodeNatPhantomParameter e0) r.field33)
+        , ("field34", (encodeNatPhantomParameter e0) r.field34)
+        , ("field35", (encodeNatPhantomParameter e0) r.field35)
+        , ("field36", (encodeNatPhantomParameter e0) r.field36)
+        , ("field37", (encodeNatPhantomParameter e0) r.field37)
+        , ("field38", (encodeNatPhantomParameter e0) r.field38)
+        , ("field39", (encodeNatPhantomParameter e0) r.field39)
+        , ("field40", (encodeNatPhantomParameter e0) r.field40)
+        , ("field41", (encodeNatPhantomParameter e0) r.field41)
+        , ("field42", (encodeNatPhantomParameter e0) r.field42)
+        , ("field43", (encodeNatPhantomParameter e0) r.field43)
+        , ("field44", (encodeNatPhantomParameter e0) r.field44)
+        , ("field45", (encodeNatPhantomParameter e0) r.field45)
+        , ("field46", (encodeNatPhantomParameter e0) r.field46)
+        , ("field47", (encodeNatPhantomParameter e0) r.field47)
+        , ("field48", (encodeNatPhantomParameter e0) r.field48)
+        , ("field49", (encodeNatPhantomParameter e0) r.field49)
+        , ("field50", (encodeNatPhantomParameter e0) r.field50)
+        , ("field51", (encodeNatPhantomParameter e0) r.field51)
+        , ("field52", (encodeNatPhantomParameter e0) r.field52)
+        , ("field53", (encodeNatPhantomParameter e0) r.field53)
+        , ("field54", (encodeNatPhantomParameter e0) r.field54)
+        , ("field55", (encodeNatPhantomParameter e0) r.field55)
+        , ("field56", (encodeNatPhantomParameter e0) r.field56)
+        , ("field57", (encodeNatPhantomParameter e0) r.field57)
+        , ("field58", (encodeNatPhantomParameter e0) r.field58)
+        , ("field59", (encodeNatPhantomParameter e0) r.field59)
+        , ("field60", (encodeNatPhantomParameter e0) r.field60)
+        , ("field61", (encodeNatPhantomParameter e0) r.field61)
+        , ("field62", (encodeNatPhantomParameter e0) r.field62)
+        , ("field63", (encodeNatPhantomParameter e0) r.field63)
+        , ("field64", (encodeNatPhantomParameter e0) r.field64)
+        , ("field65", (encodeNatPhantomParameter e0) r.field65)
+        , ("field66", (encodeNatPhantomParameter e0) r.field66)
+        , ("field67", (encodeNatPhantomParameter e0) r.field67)
+        , ("field68", (encodeNatPhantomParameter e0) r.field68)
+        , ("field69", (encodeNatPhantomParameter e0) r.field69)
+        , ("field70", (encodeNatPhantomParameter e0) r.field70)
+        , ("field71", (encodeNatPhantomParameter e0) r.field71)
+        , ("field72", (encodeNatPhantomParameter e0) r.field72)
+        , ("field73", (encodeNatPhantomParameter e0) r.field73)
+        , ("field74", (encodeNatPhantomParameter e0) r.field74)
+        , ("field75", (encodeNatPhantomParameter e0) r.field75)
+        , ("field76", (encodeNatPhantomParameter e0) r.field76)
+        , ("field77", (encodeNatPhantomParameter e0) r.field77)
+        , ("field78", (encodeNatPhantomParameter e0) r.field78)
+        , ("field79", (encodeNatPhantomParameter e0) r.field79)
+        , ("field80", (encodeNatPhantomParameter e0) r.field80)
+        , ("field81", (encodeNatPhantomParameter e0) r.field81)
+        , ("field82", (encodeNatPhantomParameter e0) r.field82)
+        , ("field83", (encodeNatPhantomParameter e0) r.field83)
+        , ("field84", (encodeNatPhantomParameter e0) r.field84)
+        , ("field85", (encodeNatPhantomParameter e0) r.field85)
+        , ("field86", (encodeNatPhantomParameter e0) r.field86)
+        , ("field87", (encodeNatPhantomParameter e0) r.field87)
+        , ("field88", (encodeNatPhantomParameter e0) r.field88)
+        , ("field89", (encodeNatPhantomParameter e0) r.field89)
+        , ("field90", (encodeNatPhantomParameter e0) r.field90)
+        , ("field91", (encodeNatPhantomParameter e0) r.field91)
+        , ("field92", (encodeNatPhantomParameter e0) r.field92)
+        , ("field93", (encodeNatPhantomParameter e0) r.field93)
+        , ("field94", (encodeNatPhantomParameter e0) r.field94)
+        , ("field95", (encodeNatPhantomParameter e0) r.field95)
+        , ("field96", (encodeNatPhantomParameter e0) r.field96)
+        , ("field97", (encodeNatPhantomParameter e0) r.field97)
+        , ("field98", (encodeNatPhantomParameter e0) r.field98)
+        , ("field99", (encodeNatPhantomParameter e0) r.field99)
+        ]
+
+encodeRecordWithMultipleConstructors : RecordWithMultipleConstructors -> Value
+encodeRecordWithMultipleConstructors v =
+  case v of
+    FirstRecordConstructor r -> Json.Encode.object
+      [ ( "tag", Json.Encode.string "FirstRecordConstructor" )
+      , ( "contents"
+        , Json.Encode.object
+          [ ("foo", (Json.Encode.bool) r.foo)
+          ]
+        )
+      ]
+    SecondRecordConstructor r -> Json.Encode.object
+      [ ( "tag", Json.Encode.string "SecondRecordConstructor" )
+      , ( "contents"
+        , Json.Encode.object
+          [ ("bar", (Json.Encode.Extra.maybe (Json.Encode.int)) r.bar)
+          ]
+        )
+      ]
+
+encodeNatPhantomParameter : (e0 -> Value) -> (LookMaNoPhantomParam e0) -> Value
+encodeNatPhantomParameter e0 v =
+  case v of
+    NatPhantomParameter p0 ->
+      (Json.Encode.list e0) p0
+
+encodeHKTWithUnspecializedParams : (e0 -> Value) -> (e1 -> Value) -> (HKTWithUnspecializedParams e0 e1) -> Value
+encodeHKTWithUnspecializedParams e0 e1 v =
+  case v of
+    HKTWithUnspecializedParams p0 p1 ->
+      Json.Encode.list identity
+        [ (Codegen.Either.encodeEither (Json.Encode.int) (Codegen.Either.encodeEither (Json.Encode.int) (Codegen.Either.encodeEither (Json.Encode.int) e0))) p0
+        , e1 p1
+        ]
+
+encodeHKTWithSpecializedKindStarParams : HKTWithSpecializedKindStarParams -> Value
+encodeHKTWithSpecializedKindStarParams v =
+  case v of
+    HKTWithSpecializedKindStarParams p0 p1 ->
+      Json.Encode.list identity
+        [ (Json.Encode.string) p0
+        , (Json.Encode.Extra.maybe (Json.Encode.int)) p1
+        ]
+
+encodeSimpleHKT : SimpleHKTMaybe -> Value
+encodeSimpleHKT v =
+  case v of
+    SimpleHKT p0 ->
+      (Json.Encode.Extra.maybe (Json.Encode.string)) p0
+
+encodePolymorphicRecursiveType : (e0 -> Value) -> (PolymorphicRecursiveType e0) -> Value
+encodePolymorphicRecursiveType e0 v =
+  case v of
+    SPRTNil -> Json.Encode.object
+      [ ( "tag", Json.Encode.string "SPRTNil" )]
+    SPRTCons p0 p1 -> Json.Encode.object
+      [ ( "tag", Json.Encode.string "SPRTCons" )
+      , ( "contents"
+        , Json.Encode.list identity
+          [ e0 p0
+          , (encodePolymorphicRecursiveType e0) p1
+          ]
+        )
+      ]
+
+encodeMonomorphicRecursiveType : MonomorphicRecursiveType -> Value
+encodeMonomorphicRecursiveType v =
+  case v of
+    SMRTNil -> Json.Encode.object
+      [ ( "tag", Json.Encode.string "SMRTNil" )]
+    SMRTCons p0 p1 -> Json.Encode.object
+      [ ( "tag", Json.Encode.string "SMRTCons" )
+      , ( "contents"
+        , Json.Encode.list identity
+          [ (Json.Encode.int) p0
+          , (encodeMonomorphicRecursiveType) p1
+          ]
+        )
+      ]
+
+encodeEmptyAlias : EmptyAlias -> Value
+encodeEmptyAlias r =
+  Json.Encode.list identity []
+
+encodeSimpleRecordAlias : SimpleRecordAlias -> Value
+encodeSimpleRecordAlias r =
+  Json.Encode.object
+    [ ("name", (encodePolymorphicRecursiveType (encodeSimpleType)) r.name)
+    , ("age", (encodeSimpleType) r.age)
+    ]
+
+encodeSimpleRecord : SimpleRecord -> Value
+encodeSimpleRecord v =
+  case v of
+    SimpleRecord r ->
+      Json.Encode.object
+        [ ("name", (encodePolymorphicRecursiveType (encodeSimpleType)) r.name)
+        , ("age", (encodeSimpleType) r.age)
+        ]
+
+encodeSimpleType : SimpleType -> Value
+encodeSimpleType v =
+  case v of
+    SimpleType p0 ->
+      (Json.Encode.int) p0
+
+decodeLargeRecord : Decoder a0 -> Decoder (LargeRecord a0)
+decodeLargeRecord d0 =
+  let mkFunction =
+        \field0 field1 field2 field3 field4 field5 field6 field7 field8 field9 field10 field11 field12 field13 field14 field15 field16 field17 field18 field19 field20 field21 field22 field23 field24 field25 field26 field27 field28 field29 field30 field31 field32 field33 field34 field35 field36 field37 field38 field39 field40 field41 field42 field43 field44 field45 field46 field47 field48 field49 field50 field51 field52 field53 field54 field55 field56 field57 field58 field59 field60 field61 field62 field63 field64 field65 field66 field67 field68 field69 field70 field71 field72 field73 field74 field75 field76 field77 field78 field79 field80 field81 field82 field83 field84 field85 field86 field87 field88 field89 field90 field91 field92 field93 field94 field95 field96 field97 field98 field99 ->
+          { field0 = field0
+          , field1 = field1
+          , field2 = field2
+          , field3 = field3
+          , field4 = field4
+          , field5 = field5
+          , field6 = field6
+          , field7 = field7
+          , field8 = field8
+          , field9 = field9
+          , field10 = field10
+          , field11 = field11
+          , field12 = field12
+          , field13 = field13
+          , field14 = field14
+          , field15 = field15
+          , field16 = field16
+          , field17 = field17
+          , field18 = field18
+          , field19 = field19
+          , field20 = field20
+          , field21 = field21
+          , field22 = field22
+          , field23 = field23
+          , field24 = field24
+          , field25 = field25
+          , field26 = field26
+          , field27 = field27
+          , field28 = field28
+          , field29 = field29
+          , field30 = field30
+          , field31 = field31
+          , field32 = field32
+          , field33 = field33
+          , field34 = field34
+          , field35 = field35
+          , field36 = field36
+          , field37 = field37
+          , field38 = field38
+          , field39 = field39
+          , field40 = field40
+          , field41 = field41
+          , field42 = field42
+          , field43 = field43
+          , field44 = field44
+          , field45 = field45
+          , field46 = field46
+          , field47 = field47
+          , field48 = field48
+          , field49 = field49
+          , field50 = field50
+          , field51 = field51
+          , field52 = field52
+          , field53 = field53
+          , field54 = field54
+          , field55 = field55
+          , field56 = field56
+          , field57 = field57
+          , field58 = field58
+          , field59 = field59
+          , field60 = field60
+          , field61 = field61
+          , field62 = field62
+          , field63 = field63
+          , field64 = field64
+          , field65 = field65
+          , field66 = field66
+          , field67 = field67
+          , field68 = field68
+          , field69 = field69
+          , field70 = field70
+          , field71 = field71
+          , field72 = field72
+          , field73 = field73
+          , field74 = field74
+          , field75 = field75
+          , field76 = field76
+          , field77 = field77
+          , field78 = field78
+          , field79 = field79
+          , field80 = field80
+          , field81 = field81
+          , field82 = field82
+          , field83 = field83
+          , field84 = field84
+          , field85 = field85
+          , field86 = field86
+          , field87 = field87
+          , field88 = field88
+          , field89 = field89
+          , field90 = field90
+          , field91 = field91
+          , field92 = field92
+          , field93 = field93
+          , field94 = field94
+          , field95 = field95
+          , field96 = field96
+          , field97 = field97
+          , field98 = field98
+          , field99 = field99
+          }
+      contentDecoder =
+        Json.Decode.succeed mkFunction
+          |> andMap (Json.Decode.field "field0" (decodeNatPhantomParameter d0))
+          |> andMap (Json.Decode.field "field1" (decodeNatPhantomParameter d0))
+          |> andMap (Json.Decode.field "field2" (decodeNatPhantomParameter d0))
+          |> andMap (Json.Decode.field "field3" (decodeNatPhantomParameter d0))
+          |> andMap (Json.Decode.field "field4" (decodeNatPhantomParameter d0))
+          |> andMap (Json.Decode.field "field5" (decodeNatPhantomParameter d0))
+          |> andMap (Json.Decode.field "field6" (decodeNatPhantomParameter d0))
+          |> andMap (Json.Decode.field "field7" (decodeNatPhantomParameter d0))
+          |> andMap (Json.Decode.field "field8" (decodeNatPhantomParameter d0))
+          |> andMap (Json.Decode.field "field9" (decodeNatPhantomParameter d0))
+          |> andMap (Json.Decode.field "field10" (decodeNatPhantomParameter d0))
+          |> andMap (Json.Decode.field "field11" (decodeNatPhantomParameter d0))
+          |> andMap (Json.Decode.field "field12" (decodeNatPhantomParameter d0))
+          |> andMap (Json.Decode.field "field13" (decodeNatPhantomParameter d0))
+          |> andMap (Json.Decode.field "field14" (decodeNatPhantomParameter d0))
+          |> andMap (Json.Decode.field "field15" (decodeNatPhantomParameter d0))
+          |> andMap (Json.Decode.field "field16" (decodeNatPhantomParameter d0))
+          |> andMap (Json.Decode.field "field17" (decodeNatPhantomParameter d0))
+          |> andMap (Json.Decode.field "field18" (decodeNatPhantomParameter d0))
+          |> andMap (Json.Decode.field "field19" (decodeNatPhantomParameter d0))
+          |> andMap (Json.Decode.field "field20" (decodeNatPhantomParameter d0))
+          |> andMap (Json.Decode.field "field21" (decodeNatPhantomParameter d0))
+          |> andMap (Json.Decode.field "field22" (decodeNatPhantomParameter d0))
+          |> andMap (Json.Decode.field "field23" (decodeNatPhantomParameter d0))
+          |> andMap (Json.Decode.field "field24" (decodeNatPhantomParameter d0))
+          |> andMap (Json.Decode.field "field25" (decodeNatPhantomParameter d0))
+          |> andMap (Json.Decode.field "field26" (decodeNatPhantomParameter d0))
+          |> andMap (Json.Decode.field "field27" (decodeNatPhantomParameter d0))
+          |> andMap (Json.Decode.field "field28" (decodeNatPhantomParameter d0))
+          |> andMap (Json.Decode.field "field29" (decodeNatPhantomParameter d0))
+          |> andMap (Json.Decode.field "field30" (decodeNatPhantomParameter d0))
+          |> andMap (Json.Decode.field "field31" (decodeNatPhantomParameter d0))
+          |> andMap (Json.Decode.field "field32" (decodeNatPhantomParameter d0))
+          |> andMap (Json.Decode.field "field33" (decodeNatPhantomParameter d0))
+          |> andMap (Json.Decode.field "field34" (decodeNatPhantomParameter d0))
+          |> andMap (Json.Decode.field "field35" (decodeNatPhantomParameter d0))
+          |> andMap (Json.Decode.field "field36" (decodeNatPhantomParameter d0))
+          |> andMap (Json.Decode.field "field37" (decodeNatPhantomParameter d0))
+          |> andMap (Json.Decode.field "field38" (decodeNatPhantomParameter d0))
+          |> andMap (Json.Decode.field "field39" (decodeNatPhantomParameter d0))
+          |> andMap (Json.Decode.field "field40" (decodeNatPhantomParameter d0))
+          |> andMap (Json.Decode.field "field41" (decodeNatPhantomParameter d0))
+          |> andMap (Json.Decode.field "field42" (decodeNatPhantomParameter d0))
+          |> andMap (Json.Decode.field "field43" (decodeNatPhantomParameter d0))
+          |> andMap (Json.Decode.field "field44" (decodeNatPhantomParameter d0))
+          |> andMap (Json.Decode.field "field45" (decodeNatPhantomParameter d0))
+          |> andMap (Json.Decode.field "field46" (decodeNatPhantomParameter d0))
+          |> andMap (Json.Decode.field "field47" (decodeNatPhantomParameter d0))
+          |> andMap (Json.Decode.field "field48" (decodeNatPhantomParameter d0))
+          |> andMap (Json.Decode.field "field49" (decodeNatPhantomParameter d0))
+          |> andMap (Json.Decode.field "field50" (decodeNatPhantomParameter d0))
+          |> andMap (Json.Decode.field "field51" (decodeNatPhantomParameter d0))
+          |> andMap (Json.Decode.field "field52" (decodeNatPhantomParameter d0))
+          |> andMap (Json.Decode.field "field53" (decodeNatPhantomParameter d0))
+          |> andMap (Json.Decode.field "field54" (decodeNatPhantomParameter d0))
+          |> andMap (Json.Decode.field "field55" (decodeNatPhantomParameter d0))
+          |> andMap (Json.Decode.field "field56" (decodeNatPhantomParameter d0))
+          |> andMap (Json.Decode.field "field57" (decodeNatPhantomParameter d0))
+          |> andMap (Json.Decode.field "field58" (decodeNatPhantomParameter d0))
+          |> andMap (Json.Decode.field "field59" (decodeNatPhantomParameter d0))
+          |> andMap (Json.Decode.field "field60" (decodeNatPhantomParameter d0))
+          |> andMap (Json.Decode.field "field61" (decodeNatPhantomParameter d0))
+          |> andMap (Json.Decode.field "field62" (decodeNatPhantomParameter d0))
+          |> andMap (Json.Decode.field "field63" (decodeNatPhantomParameter d0))
+          |> andMap (Json.Decode.field "field64" (decodeNatPhantomParameter d0))
+          |> andMap (Json.Decode.field "field65" (decodeNatPhantomParameter d0))
+          |> andMap (Json.Decode.field "field66" (decodeNatPhantomParameter d0))
+          |> andMap (Json.Decode.field "field67" (decodeNatPhantomParameter d0))
+          |> andMap (Json.Decode.field "field68" (decodeNatPhantomParameter d0))
+          |> andMap (Json.Decode.field "field69" (decodeNatPhantomParameter d0))
+          |> andMap (Json.Decode.field "field70" (decodeNatPhantomParameter d0))
+          |> andMap (Json.Decode.field "field71" (decodeNatPhantomParameter d0))
+          |> andMap (Json.Decode.field "field72" (decodeNatPhantomParameter d0))
+          |> andMap (Json.Decode.field "field73" (decodeNatPhantomParameter d0))
+          |> andMap (Json.Decode.field "field74" (decodeNatPhantomParameter d0))
+          |> andMap (Json.Decode.field "field75" (decodeNatPhantomParameter d0))
+          |> andMap (Json.Decode.field "field76" (decodeNatPhantomParameter d0))
+          |> andMap (Json.Decode.field "field77" (decodeNatPhantomParameter d0))
+          |> andMap (Json.Decode.field "field78" (decodeNatPhantomParameter d0))
+          |> andMap (Json.Decode.field "field79" (decodeNatPhantomParameter d0))
+          |> andMap (Json.Decode.field "field80" (decodeNatPhantomParameter d0))
+          |> andMap (Json.Decode.field "field81" (decodeNatPhantomParameter d0))
+          |> andMap (Json.Decode.field "field82" (decodeNatPhantomParameter d0))
+          |> andMap (Json.Decode.field "field83" (decodeNatPhantomParameter d0))
+          |> andMap (Json.Decode.field "field84" (decodeNatPhantomParameter d0))
+          |> andMap (Json.Decode.field "field85" (decodeNatPhantomParameter d0))
+          |> andMap (Json.Decode.field "field86" (decodeNatPhantomParameter d0))
+          |> andMap (Json.Decode.field "field87" (decodeNatPhantomParameter d0))
+          |> andMap (Json.Decode.field "field88" (decodeNatPhantomParameter d0))
+          |> andMap (Json.Decode.field "field89" (decodeNatPhantomParameter d0))
+          |> andMap (Json.Decode.field "field90" (decodeNatPhantomParameter d0))
+          |> andMap (Json.Decode.field "field91" (decodeNatPhantomParameter d0))
+          |> andMap (Json.Decode.field "field92" (decodeNatPhantomParameter d0))
+          |> andMap (Json.Decode.field "field93" (decodeNatPhantomParameter d0))
+          |> andMap (Json.Decode.field "field94" (decodeNatPhantomParameter d0))
+          |> andMap (Json.Decode.field "field95" (decodeNatPhantomParameter d0))
+          |> andMap (Json.Decode.field "field96" (decodeNatPhantomParameter d0))
+          |> andMap (Json.Decode.field "field97" (decodeNatPhantomParameter d0))
+          |> andMap (Json.Decode.field "field98" (decodeNatPhantomParameter d0))
+          |> andMap (Json.Decode.field "field99" (decodeNatPhantomParameter d0))
+  in Json.Decode.field "contents" (Json.Decode.map LargeRecord contentDecoder)
+
+decodeRecordWithMultipleConstructors : Decoder RecordWithMultipleConstructors
+decodeRecordWithMultipleConstructors  =
+  let
+    decide : String -> Decoder RecordWithMultipleConstructors
+    decide tag =
+      case tag of
+        "FirstRecordConstructor" ->
+          let mkFunction =
+                \foo ->
+                  { foo = foo
+                  }
+              contentDecoder =
+                Json.Decode.succeed mkFunction
+                  |> andMap (Json.Decode.field "foo" Json.Decode.bool)
+          in Json.Decode.field "contents" (Json.Decode.map FirstRecordConstructor contentDecoder)
+        "SecondRecordConstructor" ->
+          let mkFunction =
+                \bar ->
+                  { bar = bar
+                  }
+              contentDecoder =
+                Json.Decode.succeed mkFunction
+                  |> andMap (Json.Decode.field "bar" (Json.Decode.nullable Json.Decode.int))
+          in Json.Decode.field "contents" (Json.Decode.map SecondRecordConstructor contentDecoder)
+        other ->
+          Json.Decode.fail <| "RecordWithMultipleConstructors doesn't have constructor: " ++ other
+  in
+  Json.Decode.field "tag" Json.Decode.string
+   |> Json.Decode.andThen decide
+
+decodeNatPhantomParameter : Decoder a0 -> Decoder (LookMaNoPhantomParam a0)
+decodeNatPhantomParameter d0 =
+  Json.Decode.field "contents" <| Json.Decode.map NatPhantomParameter (Json.Decode.list d0)
+
+decodeHKTWithUnspecializedParams : Decoder a0 -> Decoder a1 -> Decoder (HKTWithUnspecializedParams a0 a1)
+decodeHKTWithUnspecializedParams d0 d1 =
+  let contentDecoder =
+        Json.Decode.succeed HKTWithUnspecializedParams
+          |> andMap (Json.Decode.index 0 (Codegen.Either.decodeEither Json.Decode.int (Codegen.Either.decodeEither Json.Decode.int (Codegen.Either.decodeEither Json.Decode.int d0))))
+          |> andMap (Json.Decode.index 1 d1)
+  in
+  Json.Decode.field "contents" contentDecoder
+
+decodeHKTWithSpecializedKindStarParams : Decoder HKTWithSpecializedKindStarParams
+decodeHKTWithSpecializedKindStarParams  =
+  let contentDecoder =
+        Json.Decode.succeed HKTWithSpecializedKindStarParams
+          |> andMap (Json.Decode.index 0 Json.Decode.string)
+          |> andMap (Json.Decode.index 1 (Json.Decode.nullable Json.Decode.int))
+  in
+  Json.Decode.field "contents" contentDecoder
+
+decodeSimpleHKT : Decoder SimpleHKTMaybe
+decodeSimpleHKT  =
+  Json.Decode.field "contents" <| Json.Decode.map SimpleHKT (Json.Decode.nullable Json.Decode.string)
+
+decodePolymorphicRecursiveType : Decoder a0 -> Decoder (PolymorphicRecursiveType a0)
+decodePolymorphicRecursiveType d0 =
+  let
+    decide : String -> Decoder (PolymorphicRecursiveType a0)
+    decide tag =
+      case tag of
+        "SPRTNil" ->
+          Json.Decode.succeed SPRTNil
+        "SPRTCons" ->
+          let contentDecoder =
+                Json.Decode.succeed SPRTCons
+                  |> andMap (Json.Decode.index 0 d0)
+                  |> andMap (Json.Decode.index 1 (Json.Decode.lazy (\_ -> decodePolymorphicRecursiveType d0)))
+          in
+          Json.Decode.field "contents" contentDecoder
+        other ->
+          Json.Decode.fail <| "(PolymorphicRecursiveType a0) doesn't have constructor: " ++ other
+  in
+  Json.Decode.field "tag" Json.Decode.string
+   |> Json.Decode.andThen decide
+
+decodeMonomorphicRecursiveType : Decoder MonomorphicRecursiveType
+decodeMonomorphicRecursiveType  =
+  let
+    decide : String -> Decoder MonomorphicRecursiveType
+    decide tag =
+      case tag of
+        "SMRTNil" ->
+          Json.Decode.succeed SMRTNil
+        "SMRTCons" ->
+          let contentDecoder =
+                Json.Decode.succeed SMRTCons
+                  |> andMap (Json.Decode.index 0 Json.Decode.int)
+                  |> andMap (Json.Decode.index 1 (Json.Decode.lazy (\_ -> decodeMonomorphicRecursiveType )))
+          in
+          Json.Decode.field "contents" contentDecoder
+        other ->
+          Json.Decode.fail <| "MonomorphicRecursiveType doesn't have constructor: " ++ other
+  in
+  Json.Decode.field "tag" Json.Decode.string
+   |> Json.Decode.andThen decide
+
+decodeEmptyAlias : Decoder EmptyAlias
+decodeEmptyAlias  =
+  Json.Decode.succeed {}
+
+decodeSimpleRecordAlias : Decoder SimpleRecordAlias
+decodeSimpleRecordAlias  =
+  let mkFunction =
+        \name age ->
+          { name = name
+          , age = age
+          }
+      contentDecoder =
+        Json.Decode.succeed mkFunction
+          |> andMap (Json.Decode.field "name" (decodePolymorphicRecursiveType decodeSimpleType))
+          |> andMap (Json.Decode.field "age" decodeSimpleType)
+  in contentDecoder
+
+decodeSimpleRecord : Decoder SimpleRecord
+decodeSimpleRecord  =
+  let mkFunction =
+        \name age ->
+          { name = name
+          , age = age
+          }
+      contentDecoder =
+        Json.Decode.succeed mkFunction
+          |> andMap (Json.Decode.field "name" (decodePolymorphicRecursiveType decodeSimpleType))
+          |> andMap (Json.Decode.field "age" decodeSimpleType)
+  in Json.Decode.field "contents" (Json.Decode.map SimpleRecord contentDecoder)
+
+decodeSimpleType : Decoder SimpleType
+decodeSimpleType  =
+  Json.Decode.field "contents" <| Json.Decode.map SimpleType Json.Decode.int
+################################################################################
+
+################################################################################
+Codegen.Submission: 
+################################################################################
+module Codegen.Submission exposing (..)
+
+import Json.Decode
+import Json.Encode
+import Json.Encode.Extra
+import Maybe
+import Json.Encode
+import Json.Encode exposing (Value)
+import Json.Decode
+import Json.Decode exposing (Decoder)
+import Json.Decode.Extra exposing (andMap)
+
+
+type Form 
+  = Form
+      { userName : String
+      , upload : (Maybe.Maybe FileUpload)
+      }
+
+type FileUpload 
+  = FileUpload
+      { fileName : String
+      }
+
+encodeForm : Form -> Value
+encodeForm v =
+  case v of
+    Form r ->
+      Json.Encode.object
+        [ ("userName", (Json.Encode.string) r.userName)
+        , ("upload", (Json.Encode.Extra.maybe (encodeFileUpload)) r.upload)
+        ]
+
+encodeFileUpload : FileUpload -> Value
+encodeFileUpload v =
+  case v of
+    FileUpload r ->
+      Json.Encode.object
+        [ ("fileName", (Json.Encode.string) r.fileName)
+        ]
+
+decodeForm : Decoder Form
+decodeForm  =
+  let mkFunction =
+        \userName upload ->
+          { userName = userName
+          , upload = upload
+          }
+      contentDecoder =
+        Json.Decode.succeed mkFunction
+          |> andMap (Json.Decode.field "userName" Json.Decode.string)
+          |> andMap (Json.Decode.field "upload" (Json.Decode.nullable decodeFileUpload))
+  in Json.Decode.field "contents" (Json.Decode.map Form contentDecoder)
+
+decodeFileUpload : Decoder FileUpload
+decodeFileUpload  =
+  let mkFunction =
+        \fileName ->
+          { fileName = fileName
+          }
+      contentDecoder =
+        Json.Decode.succeed mkFunction
+          |> andMap (Json.Decode.field "fileName" Json.Decode.string)
+  in Json.Decode.field "contents" (Json.Decode.map FileUpload contentDecoder)
+################################################################################
+
+################################################################################
+Data.CountryCode: 
+################################################################################
+module Data.CountryCode exposing (..)
+
+
+import Json.Encode
+import Json.Encode exposing (Value)
+import Json.Decode
+import Json.Decode exposing (Decoder)
+import Json.Decode.Extra exposing (andMap)
+
+
+type CountryCode 
+  = AD
+  | AE
+  | AF
+  | AG
+  | AI
+  | AL
+  | AM
+  | AO
+  | AQ
+  | AR
+  | AS
+  | AT
+  | AU
+  | AW
+  | AX
+  | AZ
+  | BA
+  | BB
+  | BD
+  | BE
+  | BF
+  | BG
+  | BH
+  | BI
+  | BJ
+  | BL
+  | BM
+  | BN
+  | BO
+  | BQ
+  | BR
+  | BS
+  | BT
+  | BV
+  | BW
+  | BY
+  | BZ
+  | CA
+  | CC
+  | CD
+  | CF
+  | CG
+  | CH
+  | CI
+  | CK
+  | CL
+  | CM
+  | CN
+  | CO
+  | CR
+  | CU
+  | CV
+  | CW
+  | CX
+  | CY
+  | CZ
+  | DE
+  | DJ
+  | DK
+  | DM
+  | DO
+  | DZ
+  | EC
+  | EE
+  | EG
+  | EH
+  | ER
+  | ES
+  | ET
+  | FI
+  | FJ
+  | FK
+  | FM
+  | FO
+  | FR
+  | GA
+  | GB
+  | GD
+  | GE
+  | GF
+  | GG
+  | GH
+  | GI
+  | GL
+  | GM
+  | GN
+  | GP
+  | GQ
+  | GR
+  | GS
+  | GT
+  | GU
+  | GW
+  | GY
+  | HK
+  | HM
+  | HN
+  | HR
+  | HT
+  | HU
+  | ID
+  | IE
+  | IL
+  | IM
+  | IN
+  | IO
+  | IQ
+  | IR
+  | IS
+  | IT
+  | JE
+  | JM
+  | JO
+  | JP
+  | KE
+  | KG
+  | KH
+  | KI
+  | KM
+  | KN
+  | KP
+  | KR
+  | KW
+  | KY
+  | KZ
+  | LA
+  | LB
+  | LC
+  | LI
+  | LK
+  | LR
+  | LS
+  | LT
+  | LU
+  | LV
+  | LY
+  | MA
+  | MC
+  | MD
+  | ME
+  | MF
+  | MG
+  | MH
+  | MK
+  | ML
+  | MM
+  | MN
+  | MO
+  | MP
+  | MQ
+  | MR
+  | MS
+  | MT
+  | MU
+  | MV
+  | MW
+  | MX
+  | MY
+  | MZ
+  | NA
+  | NC
+  | NE
+  | NF
+  | NG
+  | NI
+  | NL
+  | NO
+  | NP
+  | NR
+  | NU
+  | NZ
+  | OM
+  | PA
+  | PE
+  | PF
+  | PG
+  | PH
+  | PK
+  | PL
+  | PM
+  | PN
+  | PR
+  | PS
+  | PT
+  | PW
+  | PY
+  | QA
+  | RE
+  | RO
+  | RS
+  | RU
+  | RW
+  | SA
+  | SB
+  | SC
+  | SD
+  | SE
+  | SG
+  | SH
+  | SI
+  | SJ
+  | SK
+  | SL
+  | SM
+  | SN
+  | SO
+  | SR
+  | SS
+  | ST
+  | SV
+  | SX
+  | SY
+  | SZ
+  | TC
+  | TD
+  | TF
+  | TG
+  | TH
+  | TJ
+  | TK
+  | TL
+  | TM
+  | TN
+  | TO
+  | TR
+  | TT
+  | TV
+  | TW
+  | TZ
+  | UA
+  | UG
+  | UM
+  | US
+  | UY
+  | UZ
+  | VA
+  | VC
+  | VE
+  | VG
+  | VI
+  | VN
+  | VU
+  | WF
+  | WS
+  | YE
+  | YT
+  | ZA
+  | ZM
+  | ZW
+
+encodeCountryCode : CountryCode -> Value
+encodeCountryCode v =
+  case v of
+    AD -> Json.Encode.string "AD"
+    AE -> Json.Encode.string "AE"
+    AF -> Json.Encode.string "AF"
+    AG -> Json.Encode.string "AG"
+    AI -> Json.Encode.string "AI"
+    AL -> Json.Encode.string "AL"
+    AM -> Json.Encode.string "AM"
+    AO -> Json.Encode.string "AO"
+    AQ -> Json.Encode.string "AQ"
+    AR -> Json.Encode.string "AR"
+    AS -> Json.Encode.string "AS"
+    AT -> Json.Encode.string "AT"
+    AU -> Json.Encode.string "AU"
+    AW -> Json.Encode.string "AW"
+    AX -> Json.Encode.string "AX"
+    AZ -> Json.Encode.string "AZ"
+    BA -> Json.Encode.string "BA"
+    BB -> Json.Encode.string "BB"
+    BD -> Json.Encode.string "BD"
+    BE -> Json.Encode.string "BE"
+    BF -> Json.Encode.string "BF"
+    BG -> Json.Encode.string "BG"
+    BH -> Json.Encode.string "BH"
+    BI -> Json.Encode.string "BI"
+    BJ -> Json.Encode.string "BJ"
+    BL -> Json.Encode.string "BL"
+    BM -> Json.Encode.string "BM"
+    BN -> Json.Encode.string "BN"
+    BO -> Json.Encode.string "BO"
+    BQ -> Json.Encode.string "BQ"
+    BR -> Json.Encode.string "BR"
+    BS -> Json.Encode.string "BS"
+    BT -> Json.Encode.string "BT"
+    BV -> Json.Encode.string "BV"
+    BW -> Json.Encode.string "BW"
+    BY -> Json.Encode.string "BY"
+    BZ -> Json.Encode.string "BZ"
+    CA -> Json.Encode.string "CA"
+    CC -> Json.Encode.string "CC"
+    CD -> Json.Encode.string "CD"
+    CF -> Json.Encode.string "CF"
+    CG -> Json.Encode.string "CG"
+    CH -> Json.Encode.string "CH"
+    CI -> Json.Encode.string "CI"
+    CK -> Json.Encode.string "CK"
+    CL -> Json.Encode.string "CL"
+    CM -> Json.Encode.string "CM"
+    CN -> Json.Encode.string "CN"
+    CO -> Json.Encode.string "CO"
+    CR -> Json.Encode.string "CR"
+    CU -> Json.Encode.string "CU"
+    CV -> Json.Encode.string "CV"
+    CW -> Json.Encode.string "CW"
+    CX -> Json.Encode.string "CX"
+    CY -> Json.Encode.string "CY"
+    CZ -> Json.Encode.string "CZ"
+    DE -> Json.Encode.string "DE"
+    DJ -> Json.Encode.string "DJ"
+    DK -> Json.Encode.string "DK"
+    DM -> Json.Encode.string "DM"
+    DO -> Json.Encode.string "DO"
+    DZ -> Json.Encode.string "DZ"
+    EC -> Json.Encode.string "EC"
+    EE -> Json.Encode.string "EE"
+    EG -> Json.Encode.string "EG"
+    EH -> Json.Encode.string "EH"
+    ER -> Json.Encode.string "ER"
+    ES -> Json.Encode.string "ES"
+    ET -> Json.Encode.string "ET"
+    FI -> Json.Encode.string "FI"
+    FJ -> Json.Encode.string "FJ"
+    FK -> Json.Encode.string "FK"
+    FM -> Json.Encode.string "FM"
+    FO -> Json.Encode.string "FO"
+    FR -> Json.Encode.string "FR"
+    GA -> Json.Encode.string "GA"
+    GB -> Json.Encode.string "GB"
+    GD -> Json.Encode.string "GD"
+    GE -> Json.Encode.string "GE"
+    GF -> Json.Encode.string "GF"
+    GG -> Json.Encode.string "GG"
+    GH -> Json.Encode.string "GH"
+    GI -> Json.Encode.string "GI"
+    GL -> Json.Encode.string "GL"
+    GM -> Json.Encode.string "GM"
+    GN -> Json.Encode.string "GN"
+    GP -> Json.Encode.string "GP"
+    GQ -> Json.Encode.string "GQ"
+    GR -> Json.Encode.string "GR"
+    GS -> Json.Encode.string "GS"
+    GT -> Json.Encode.string "GT"
+    GU -> Json.Encode.string "GU"
+    GW -> Json.Encode.string "GW"
+    GY -> Json.Encode.string "GY"
+    HK -> Json.Encode.string "HK"
+    HM -> Json.Encode.string "HM"
+    HN -> Json.Encode.string "HN"
+    HR -> Json.Encode.string "HR"
+    HT -> Json.Encode.string "HT"
+    HU -> Json.Encode.string "HU"
+    ID -> Json.Encode.string "ID"
+    IE -> Json.Encode.string "IE"
+    IL -> Json.Encode.string "IL"
+    IM -> Json.Encode.string "IM"
+    IN -> Json.Encode.string "IN"
+    IO -> Json.Encode.string "IO"
+    IQ -> Json.Encode.string "IQ"
+    IR -> Json.Encode.string "IR"
+    IS -> Json.Encode.string "IS"
+    IT -> Json.Encode.string "IT"
+    JE -> Json.Encode.string "JE"
+    JM -> Json.Encode.string "JM"
+    JO -> Json.Encode.string "JO"
+    JP -> Json.Encode.string "JP"
+    KE -> Json.Encode.string "KE"
+    KG -> Json.Encode.string "KG"
+    KH -> Json.Encode.string "KH"
+    KI -> Json.Encode.string "KI"
+    KM -> Json.Encode.string "KM"
+    KN -> Json.Encode.string "KN"
+    KP -> Json.Encode.string "KP"
+    KR -> Json.Encode.string "KR"
+    KW -> Json.Encode.string "KW"
+    KY -> Json.Encode.string "KY"
+    KZ -> Json.Encode.string "KZ"
+    LA -> Json.Encode.string "LA"
+    LB -> Json.Encode.string "LB"
+    LC -> Json.Encode.string "LC"
+    LI -> Json.Encode.string "LI"
+    LK -> Json.Encode.string "LK"
+    LR -> Json.Encode.string "LR"
+    LS -> Json.Encode.string "LS"
+    LT -> Json.Encode.string "LT"
+    LU -> Json.Encode.string "LU"
+    LV -> Json.Encode.string "LV"
+    LY -> Json.Encode.string "LY"
+    MA -> Json.Encode.string "MA"
+    MC -> Json.Encode.string "MC"
+    MD -> Json.Encode.string "MD"
+    ME -> Json.Encode.string "ME"
+    MF -> Json.Encode.string "MF"
+    MG -> Json.Encode.string "MG"
+    MH -> Json.Encode.string "MH"
+    MK -> Json.Encode.string "MK"
+    ML -> Json.Encode.string "ML"
+    MM -> Json.Encode.string "MM"
+    MN -> Json.Encode.string "MN"
+    MO -> Json.Encode.string "MO"
+    MP -> Json.Encode.string "MP"
+    MQ -> Json.Encode.string "MQ"
+    MR -> Json.Encode.string "MR"
+    MS -> Json.Encode.string "MS"
+    MT -> Json.Encode.string "MT"
+    MU -> Json.Encode.string "MU"
+    MV -> Json.Encode.string "MV"
+    MW -> Json.Encode.string "MW"
+    MX -> Json.Encode.string "MX"
+    MY -> Json.Encode.string "MY"
+    MZ -> Json.Encode.string "MZ"
+    NA -> Json.Encode.string "NA"
+    NC -> Json.Encode.string "NC"
+    NE -> Json.Encode.string "NE"
+    NF -> Json.Encode.string "NF"
+    NG -> Json.Encode.string "NG"
+    NI -> Json.Encode.string "NI"
+    NL -> Json.Encode.string "NL"
+    NO -> Json.Encode.string "NO"
+    NP -> Json.Encode.string "NP"
+    NR -> Json.Encode.string "NR"
+    NU -> Json.Encode.string "NU"
+    NZ -> Json.Encode.string "NZ"
+    OM -> Json.Encode.string "OM"
+    PA -> Json.Encode.string "PA"
+    PE -> Json.Encode.string "PE"
+    PF -> Json.Encode.string "PF"
+    PG -> Json.Encode.string "PG"
+    PH -> Json.Encode.string "PH"
+    PK -> Json.Encode.string "PK"
+    PL -> Json.Encode.string "PL"
+    PM -> Json.Encode.string "PM"
+    PN -> Json.Encode.string "PN"
+    PR -> Json.Encode.string "PR"
+    PS -> Json.Encode.string "PS"
+    PT -> Json.Encode.string "PT"
+    PW -> Json.Encode.string "PW"
+    PY -> Json.Encode.string "PY"
+    QA -> Json.Encode.string "QA"
+    RE -> Json.Encode.string "RE"
+    RO -> Json.Encode.string "RO"
+    RS -> Json.Encode.string "RS"
+    RU -> Json.Encode.string "RU"
+    RW -> Json.Encode.string "RW"
+    SA -> Json.Encode.string "SA"
+    SB -> Json.Encode.string "SB"
+    SC -> Json.Encode.string "SC"
+    SD -> Json.Encode.string "SD"
+    SE -> Json.Encode.string "SE"
+    SG -> Json.Encode.string "SG"
+    SH -> Json.Encode.string "SH"
+    SI -> Json.Encode.string "SI"
+    SJ -> Json.Encode.string "SJ"
+    SK -> Json.Encode.string "SK"
+    SL -> Json.Encode.string "SL"
+    SM -> Json.Encode.string "SM"
+    SN -> Json.Encode.string "SN"
+    SO -> Json.Encode.string "SO"
+    SR -> Json.Encode.string "SR"
+    SS -> Json.Encode.string "SS"
+    ST -> Json.Encode.string "ST"
+    SV -> Json.Encode.string "SV"
+    SX -> Json.Encode.string "SX"
+    SY -> Json.Encode.string "SY"
+    SZ -> Json.Encode.string "SZ"
+    TC -> Json.Encode.string "TC"
+    TD -> Json.Encode.string "TD"
+    TF -> Json.Encode.string "TF"
+    TG -> Json.Encode.string "TG"
+    TH -> Json.Encode.string "TH"
+    TJ -> Json.Encode.string "TJ"
+    TK -> Json.Encode.string "TK"
+    TL -> Json.Encode.string "TL"
+    TM -> Json.Encode.string "TM"
+    TN -> Json.Encode.string "TN"
+    TO -> Json.Encode.string "TO"
+    TR -> Json.Encode.string "TR"
+    TT -> Json.Encode.string "TT"
+    TV -> Json.Encode.string "TV"
+    TW -> Json.Encode.string "TW"
+    TZ -> Json.Encode.string "TZ"
+    UA -> Json.Encode.string "UA"
+    UG -> Json.Encode.string "UG"
+    UM -> Json.Encode.string "UM"
+    US -> Json.Encode.string "US"
+    UY -> Json.Encode.string "UY"
+    UZ -> Json.Encode.string "UZ"
+    VA -> Json.Encode.string "VA"
+    VC -> Json.Encode.string "VC"
+    VE -> Json.Encode.string "VE"
+    VG -> Json.Encode.string "VG"
+    VI -> Json.Encode.string "VI"
+    VN -> Json.Encode.string "VN"
+    VU -> Json.Encode.string "VU"
+    WF -> Json.Encode.string "WF"
+    WS -> Json.Encode.string "WS"
+    YE -> Json.Encode.string "YE"
+    YT -> Json.Encode.string "YT"
+    ZA -> Json.Encode.string "ZA"
+    ZM -> Json.Encode.string "ZM"
+    ZW -> Json.Encode.string "ZW"
+
+decodeCountryCode : Decoder CountryCode
+decodeCountryCode  =
+  let
+    decide : String -> Decoder CountryCode
+    decide tag =
+      case tag of
+        "AD" -> Json.Decode.succeed AD
+        "AE" -> Json.Decode.succeed AE
+        "AF" -> Json.Decode.succeed AF
+        "AG" -> Json.Decode.succeed AG
+        "AI" -> Json.Decode.succeed AI
+        "AL" -> Json.Decode.succeed AL
+        "AM" -> Json.Decode.succeed AM
+        "AO" -> Json.Decode.succeed AO
+        "AQ" -> Json.Decode.succeed AQ
+        "AR" -> Json.Decode.succeed AR
+        "AS" -> Json.Decode.succeed AS
+        "AT" -> Json.Decode.succeed AT
+        "AU" -> Json.Decode.succeed AU
+        "AW" -> Json.Decode.succeed AW
+        "AX" -> Json.Decode.succeed AX
+        "AZ" -> Json.Decode.succeed AZ
+        "BA" -> Json.Decode.succeed BA
+        "BB" -> Json.Decode.succeed BB
+        "BD" -> Json.Decode.succeed BD
+        "BE" -> Json.Decode.succeed BE
+        "BF" -> Json.Decode.succeed BF
+        "BG" -> Json.Decode.succeed BG
+        "BH" -> Json.Decode.succeed BH
+        "BI" -> Json.Decode.succeed BI
+        "BJ" -> Json.Decode.succeed BJ
+        "BL" -> Json.Decode.succeed BL
+        "BM" -> Json.Decode.succeed BM
+        "BN" -> Json.Decode.succeed BN
+        "BO" -> Json.Decode.succeed BO
+        "BQ" -> Json.Decode.succeed BQ
+        "BR" -> Json.Decode.succeed BR
+        "BS" -> Json.Decode.succeed BS
+        "BT" -> Json.Decode.succeed BT
+        "BV" -> Json.Decode.succeed BV
+        "BW" -> Json.Decode.succeed BW
+        "BY" -> Json.Decode.succeed BY
+        "BZ" -> Json.Decode.succeed BZ
+        "CA" -> Json.Decode.succeed CA
+        "CC" -> Json.Decode.succeed CC
+        "CD" -> Json.Decode.succeed CD
+        "CF" -> Json.Decode.succeed CF
+        "CG" -> Json.Decode.succeed CG
+        "CH" -> Json.Decode.succeed CH
+        "CI" -> Json.Decode.succeed CI
+        "CK" -> Json.Decode.succeed CK
+        "CL" -> Json.Decode.succeed CL
+        "CM" -> Json.Decode.succeed CM
+        "CN" -> Json.Decode.succeed CN
+        "CO" -> Json.Decode.succeed CO
+        "CR" -> Json.Decode.succeed CR
+        "CU" -> Json.Decode.succeed CU
+        "CV" -> Json.Decode.succeed CV
+        "CW" -> Json.Decode.succeed CW
+        "CX" -> Json.Decode.succeed CX
+        "CY" -> Json.Decode.succeed CY
+        "CZ" -> Json.Decode.succeed CZ
+        "DE" -> Json.Decode.succeed DE
+        "DJ" -> Json.Decode.succeed DJ
+        "DK" -> Json.Decode.succeed DK
+        "DM" -> Json.Decode.succeed DM
+        "DO" -> Json.Decode.succeed DO
+        "DZ" -> Json.Decode.succeed DZ
+        "EC" -> Json.Decode.succeed EC
+        "EE" -> Json.Decode.succeed EE
+        "EG" -> Json.Decode.succeed EG
+        "EH" -> Json.Decode.succeed EH
+        "ER" -> Json.Decode.succeed ER
+        "ES" -> Json.Decode.succeed ES
+        "ET" -> Json.Decode.succeed ET
+        "FI" -> Json.Decode.succeed FI
+        "FJ" -> Json.Decode.succeed FJ
+        "FK" -> Json.Decode.succeed FK
+        "FM" -> Json.Decode.succeed FM
+        "FO" -> Json.Decode.succeed FO
+        "FR" -> Json.Decode.succeed FR
+        "GA" -> Json.Decode.succeed GA
+        "GB" -> Json.Decode.succeed GB
+        "GD" -> Json.Decode.succeed GD
+        "GE" -> Json.Decode.succeed GE
+        "GF" -> Json.Decode.succeed GF
+        "GG" -> Json.Decode.succeed GG
+        "GH" -> Json.Decode.succeed GH
+        "GI" -> Json.Decode.succeed GI
+        "GL" -> Json.Decode.succeed GL
+        "GM" -> Json.Decode.succeed GM
+        "GN" -> Json.Decode.succeed GN
+        "GP" -> Json.Decode.succeed GP
+        "GQ" -> Json.Decode.succeed GQ
+        "GR" -> Json.Decode.succeed GR
+        "GS" -> Json.Decode.succeed GS
+        "GT" -> Json.Decode.succeed GT
+        "GU" -> Json.Decode.succeed GU
+        "GW" -> Json.Decode.succeed GW
+        "GY" -> Json.Decode.succeed GY
+        "HK" -> Json.Decode.succeed HK
+        "HM" -> Json.Decode.succeed HM
+        "HN" -> Json.Decode.succeed HN
+        "HR" -> Json.Decode.succeed HR
+        "HT" -> Json.Decode.succeed HT
+        "HU" -> Json.Decode.succeed HU
+        "ID" -> Json.Decode.succeed ID
+        "IE" -> Json.Decode.succeed IE
+        "IL" -> Json.Decode.succeed IL
+        "IM" -> Json.Decode.succeed IM
+        "IN" -> Json.Decode.succeed IN
+        "IO" -> Json.Decode.succeed IO
+        "IQ" -> Json.Decode.succeed IQ
+        "IR" -> Json.Decode.succeed IR
+        "IS" -> Json.Decode.succeed IS
+        "IT" -> Json.Decode.succeed IT
+        "JE" -> Json.Decode.succeed JE
+        "JM" -> Json.Decode.succeed JM
+        "JO" -> Json.Decode.succeed JO
+        "JP" -> Json.Decode.succeed JP
+        "KE" -> Json.Decode.succeed KE
+        "KG" -> Json.Decode.succeed KG
+        "KH" -> Json.Decode.succeed KH
+        "KI" -> Json.Decode.succeed KI
+        "KM" -> Json.Decode.succeed KM
+        "KN" -> Json.Decode.succeed KN
+        "KP" -> Json.Decode.succeed KP
+        "KR" -> Json.Decode.succeed KR
+        "KW" -> Json.Decode.succeed KW
+        "KY" -> Json.Decode.succeed KY
+        "KZ" -> Json.Decode.succeed KZ
+        "LA" -> Json.Decode.succeed LA
+        "LB" -> Json.Decode.succeed LB
+        "LC" -> Json.Decode.succeed LC
+        "LI" -> Json.Decode.succeed LI
+        "LK" -> Json.Decode.succeed LK
+        "LR" -> Json.Decode.succeed LR
+        "LS" -> Json.Decode.succeed LS
+        "LT" -> Json.Decode.succeed LT
+        "LU" -> Json.Decode.succeed LU
+        "LV" -> Json.Decode.succeed LV
+        "LY" -> Json.Decode.succeed LY
+        "MA" -> Json.Decode.succeed MA
+        "MC" -> Json.Decode.succeed MC
+        "MD" -> Json.Decode.succeed MD
+        "ME" -> Json.Decode.succeed ME
+        "MF" -> Json.Decode.succeed MF
+        "MG" -> Json.Decode.succeed MG
+        "MH" -> Json.Decode.succeed MH
+        "MK" -> Json.Decode.succeed MK
+        "ML" -> Json.Decode.succeed ML
+        "MM" -> Json.Decode.succeed MM
+        "MN" -> Json.Decode.succeed MN
+        "MO" -> Json.Decode.succeed MO
+        "MP" -> Json.Decode.succeed MP
+        "MQ" -> Json.Decode.succeed MQ
+        "MR" -> Json.Decode.succeed MR
+        "MS" -> Json.Decode.succeed MS
+        "MT" -> Json.Decode.succeed MT
+        "MU" -> Json.Decode.succeed MU
+        "MV" -> Json.Decode.succeed MV
+        "MW" -> Json.Decode.succeed MW
+        "MX" -> Json.Decode.succeed MX
+        "MY" -> Json.Decode.succeed MY
+        "MZ" -> Json.Decode.succeed MZ
+        "NA" -> Json.Decode.succeed NA
+        "NC" -> Json.Decode.succeed NC
+        "NE" -> Json.Decode.succeed NE
+        "NF" -> Json.Decode.succeed NF
+        "NG" -> Json.Decode.succeed NG
+        "NI" -> Json.Decode.succeed NI
+        "NL" -> Json.Decode.succeed NL
+        "NO" -> Json.Decode.succeed NO
+        "NP" -> Json.Decode.succeed NP
+        "NR" -> Json.Decode.succeed NR
+        "NU" -> Json.Decode.succeed NU
+        "NZ" -> Json.Decode.succeed NZ
+        "OM" -> Json.Decode.succeed OM
+        "PA" -> Json.Decode.succeed PA
+        "PE" -> Json.Decode.succeed PE
+        "PF" -> Json.Decode.succeed PF
+        "PG" -> Json.Decode.succeed PG
+        "PH" -> Json.Decode.succeed PH
+        "PK" -> Json.Decode.succeed PK
+        "PL" -> Json.Decode.succeed PL
+        "PM" -> Json.Decode.succeed PM
+        "PN" -> Json.Decode.succeed PN
+        "PR" -> Json.Decode.succeed PR
+        "PS" -> Json.Decode.succeed PS
+        "PT" -> Json.Decode.succeed PT
+        "PW" -> Json.Decode.succeed PW
+        "PY" -> Json.Decode.succeed PY
+        "QA" -> Json.Decode.succeed QA
+        "RE" -> Json.Decode.succeed RE
+        "RO" -> Json.Decode.succeed RO
+        "RS" -> Json.Decode.succeed RS
+        "RU" -> Json.Decode.succeed RU
+        "RW" -> Json.Decode.succeed RW
+        "SA" -> Json.Decode.succeed SA
+        "SB" -> Json.Decode.succeed SB
+        "SC" -> Json.Decode.succeed SC
+        "SD" -> Json.Decode.succeed SD
+        "SE" -> Json.Decode.succeed SE
+        "SG" -> Json.Decode.succeed SG
+        "SH" -> Json.Decode.succeed SH
+        "SI" -> Json.Decode.succeed SI
+        "SJ" -> Json.Decode.succeed SJ
+        "SK" -> Json.Decode.succeed SK
+        "SL" -> Json.Decode.succeed SL
+        "SM" -> Json.Decode.succeed SM
+        "SN" -> Json.Decode.succeed SN
+        "SO" -> Json.Decode.succeed SO
+        "SR" -> Json.Decode.succeed SR
+        "SS" -> Json.Decode.succeed SS
+        "ST" -> Json.Decode.succeed ST
+        "SV" -> Json.Decode.succeed SV
+        "SX" -> Json.Decode.succeed SX
+        "SY" -> Json.Decode.succeed SY
+        "SZ" -> Json.Decode.succeed SZ
+        "TC" -> Json.Decode.succeed TC
+        "TD" -> Json.Decode.succeed TD
+        "TF" -> Json.Decode.succeed TF
+        "TG" -> Json.Decode.succeed TG
+        "TH" -> Json.Decode.succeed TH
+        "TJ" -> Json.Decode.succeed TJ
+        "TK" -> Json.Decode.succeed TK
+        "TL" -> Json.Decode.succeed TL
+        "TM" -> Json.Decode.succeed TM
+        "TN" -> Json.Decode.succeed TN
+        "TO" -> Json.Decode.succeed TO
+        "TR" -> Json.Decode.succeed TR
+        "TT" -> Json.Decode.succeed TT
+        "TV" -> Json.Decode.succeed TV
+        "TW" -> Json.Decode.succeed TW
+        "TZ" -> Json.Decode.succeed TZ
+        "UA" -> Json.Decode.succeed UA
+        "UG" -> Json.Decode.succeed UG
+        "UM" -> Json.Decode.succeed UM
+        "US" -> Json.Decode.succeed US
+        "UY" -> Json.Decode.succeed UY
+        "UZ" -> Json.Decode.succeed UZ
+        "VA" -> Json.Decode.succeed VA
+        "VC" -> Json.Decode.succeed VC
+        "VE" -> Json.Decode.succeed VE
+        "VG" -> Json.Decode.succeed VG
+        "VI" -> Json.Decode.succeed VI
+        "VN" -> Json.Decode.succeed VN
+        "VU" -> Json.Decode.succeed VU
+        "WF" -> Json.Decode.succeed WF
+        "WS" -> Json.Decode.succeed WS
+        "YE" -> Json.Decode.succeed YE
+        "YT" -> Json.Decode.succeed YT
+        "ZA" -> Json.Decode.succeed ZA
+        "ZM" -> Json.Decode.succeed ZM
+        "ZW" -> Json.Decode.succeed ZW
+        other ->
+          Json.Decode.fail <| "CountryCode doesn't have constructor: " ++ other
+  in
+  Json.Decode.string
+    |> Json.Decode.andThen decide
+################################################################################
+
diff --git a/test-output/extraction/golden/CountryCode.txt b/test-output/extraction/golden/CountryCode.txt
new file mode 100644
--- /dev/null
+++ b/test-output/extraction/golden/CountryCode.txt
@@ -0,0 +1,275 @@
+DatatypeStructure
+  { mapping =
+      ElmMapping
+        { typeName = "CountryCode"
+        , moduleName = Just "Data.CountryCode"
+        , encoderLocation =
+            Just
+              SymbolLocation
+                { symbolName = "encodeCountryCode"
+                , symbolModuleName = "Data.CountryCode"
+                }
+        , decoderLocation =
+            Just
+              SymbolLocation
+                { symbolName = "decodeCountryCode"
+                , symbolModuleName = "Data.CountryCode"
+                }
+        , args = []
+        , isTypeAlias = False
+        , urlPiece = Nothing
+        , queryParam = Nothing
+        }
+  , nParams = 0
+  , constructors =
+      [ Constructor { constructorName = "AD" , constructorFields = [] }
+      , Constructor { constructorName = "AE" , constructorFields = [] }
+      , Constructor { constructorName = "AF" , constructorFields = [] }
+      , Constructor { constructorName = "AG" , constructorFields = [] }
+      , Constructor { constructorName = "AI" , constructorFields = [] }
+      , Constructor { constructorName = "AL" , constructorFields = [] }
+      , Constructor { constructorName = "AM" , constructorFields = [] }
+      , Constructor { constructorName = "AO" , constructorFields = [] }
+      , Constructor { constructorName = "AQ" , constructorFields = [] }
+      , Constructor { constructorName = "AR" , constructorFields = [] }
+      , Constructor { constructorName = "AS" , constructorFields = [] }
+      , Constructor { constructorName = "AT" , constructorFields = [] }
+      , Constructor { constructorName = "AU" , constructorFields = [] }
+      , Constructor { constructorName = "AW" , constructorFields = [] }
+      , Constructor { constructorName = "AX" , constructorFields = [] }
+      , Constructor { constructorName = "AZ" , constructorFields = [] }
+      , Constructor { constructorName = "BA" , constructorFields = [] }
+      , Constructor { constructorName = "BB" , constructorFields = [] }
+      , Constructor { constructorName = "BD" , constructorFields = [] }
+      , Constructor { constructorName = "BE" , constructorFields = [] }
+      , Constructor { constructorName = "BF" , constructorFields = [] }
+      , Constructor { constructorName = "BG" , constructorFields = [] }
+      , Constructor { constructorName = "BH" , constructorFields = [] }
+      , Constructor { constructorName = "BI" , constructorFields = [] }
+      , Constructor { constructorName = "BJ" , constructorFields = [] }
+      , Constructor { constructorName = "BL" , constructorFields = [] }
+      , Constructor { constructorName = "BM" , constructorFields = [] }
+      , Constructor { constructorName = "BN" , constructorFields = [] }
+      , Constructor { constructorName = "BO" , constructorFields = [] }
+      , Constructor { constructorName = "BQ" , constructorFields = [] }
+      , Constructor { constructorName = "BR" , constructorFields = [] }
+      , Constructor { constructorName = "BS" , constructorFields = [] }
+      , Constructor { constructorName = "BT" , constructorFields = [] }
+      , Constructor { constructorName = "BV" , constructorFields = [] }
+      , Constructor { constructorName = "BW" , constructorFields = [] }
+      , Constructor { constructorName = "BY" , constructorFields = [] }
+      , Constructor { constructorName = "BZ" , constructorFields = [] }
+      , Constructor { constructorName = "CA" , constructorFields = [] }
+      , Constructor { constructorName = "CC" , constructorFields = [] }
+      , Constructor { constructorName = "CD" , constructorFields = [] }
+      , Constructor { constructorName = "CF" , constructorFields = [] }
+      , Constructor { constructorName = "CG" , constructorFields = [] }
+      , Constructor { constructorName = "CH" , constructorFields = [] }
+      , Constructor { constructorName = "CI" , constructorFields = [] }
+      , Constructor { constructorName = "CK" , constructorFields = [] }
+      , Constructor { constructorName = "CL" , constructorFields = [] }
+      , Constructor { constructorName = "CM" , constructorFields = [] }
+      , Constructor { constructorName = "CN" , constructorFields = [] }
+      , Constructor { constructorName = "CO" , constructorFields = [] }
+      , Constructor { constructorName = "CR" , constructorFields = [] }
+      , Constructor { constructorName = "CU" , constructorFields = [] }
+      , Constructor { constructorName = "CV" , constructorFields = [] }
+      , Constructor { constructorName = "CW" , constructorFields = [] }
+      , Constructor { constructorName = "CX" , constructorFields = [] }
+      , Constructor { constructorName = "CY" , constructorFields = [] }
+      , Constructor { constructorName = "CZ" , constructorFields = [] }
+      , Constructor { constructorName = "DE" , constructorFields = [] }
+      , Constructor { constructorName = "DJ" , constructorFields = [] }
+      , Constructor { constructorName = "DK" , constructorFields = [] }
+      , Constructor { constructorName = "DM" , constructorFields = [] }
+      , Constructor { constructorName = "DO" , constructorFields = [] }
+      , Constructor { constructorName = "DZ" , constructorFields = [] }
+      , Constructor { constructorName = "EC" , constructorFields = [] }
+      , Constructor { constructorName = "EE" , constructorFields = [] }
+      , Constructor { constructorName = "EG" , constructorFields = [] }
+      , Constructor { constructorName = "EH" , constructorFields = [] }
+      , Constructor { constructorName = "ER" , constructorFields = [] }
+      , Constructor { constructorName = "ES" , constructorFields = [] }
+      , Constructor { constructorName = "ET" , constructorFields = [] }
+      , Constructor { constructorName = "FI" , constructorFields = [] }
+      , Constructor { constructorName = "FJ" , constructorFields = [] }
+      , Constructor { constructorName = "FK" , constructorFields = [] }
+      , Constructor { constructorName = "FM" , constructorFields = [] }
+      , Constructor { constructorName = "FO" , constructorFields = [] }
+      , Constructor { constructorName = "FR" , constructorFields = [] }
+      , Constructor { constructorName = "GA" , constructorFields = [] }
+      , Constructor { constructorName = "GB" , constructorFields = [] }
+      , Constructor { constructorName = "GD" , constructorFields = [] }
+      , Constructor { constructorName = "GE" , constructorFields = [] }
+      , Constructor { constructorName = "GF" , constructorFields = [] }
+      , Constructor { constructorName = "GG" , constructorFields = [] }
+      , Constructor { constructorName = "GH" , constructorFields = [] }
+      , Constructor { constructorName = "GI" , constructorFields = [] }
+      , Constructor { constructorName = "GL" , constructorFields = [] }
+      , Constructor { constructorName = "GM" , constructorFields = [] }
+      , Constructor { constructorName = "GN" , constructorFields = [] }
+      , Constructor { constructorName = "GP" , constructorFields = [] }
+      , Constructor { constructorName = "GQ" , constructorFields = [] }
+      , Constructor { constructorName = "GR" , constructorFields = [] }
+      , Constructor { constructorName = "GS" , constructorFields = [] }
+      , Constructor { constructorName = "GT" , constructorFields = [] }
+      , Constructor { constructorName = "GU" , constructorFields = [] }
+      , Constructor { constructorName = "GW" , constructorFields = [] }
+      , Constructor { constructorName = "GY" , constructorFields = [] }
+      , Constructor { constructorName = "HK" , constructorFields = [] }
+      , Constructor { constructorName = "HM" , constructorFields = [] }
+      , Constructor { constructorName = "HN" , constructorFields = [] }
+      , Constructor { constructorName = "HR" , constructorFields = [] }
+      , Constructor { constructorName = "HT" , constructorFields = [] }
+      , Constructor { constructorName = "HU" , constructorFields = [] }
+      , Constructor { constructorName = "ID" , constructorFields = [] }
+      , Constructor { constructorName = "IE" , constructorFields = [] }
+      , Constructor { constructorName = "IL" , constructorFields = [] }
+      , Constructor { constructorName = "IM" , constructorFields = [] }
+      , Constructor { constructorName = "IN" , constructorFields = [] }
+      , Constructor { constructorName = "IO" , constructorFields = [] }
+      , Constructor { constructorName = "IQ" , constructorFields = [] }
+      , Constructor { constructorName = "IR" , constructorFields = [] }
+      , Constructor { constructorName = "IS" , constructorFields = [] }
+      , Constructor { constructorName = "IT" , constructorFields = [] }
+      , Constructor { constructorName = "JE" , constructorFields = [] }
+      , Constructor { constructorName = "JM" , constructorFields = [] }
+      , Constructor { constructorName = "JO" , constructorFields = [] }
+      , Constructor { constructorName = "JP" , constructorFields = [] }
+      , Constructor { constructorName = "KE" , constructorFields = [] }
+      , Constructor { constructorName = "KG" , constructorFields = [] }
+      , Constructor { constructorName = "KH" , constructorFields = [] }
+      , Constructor { constructorName = "KI" , constructorFields = [] }
+      , Constructor { constructorName = "KM" , constructorFields = [] }
+      , Constructor { constructorName = "KN" , constructorFields = [] }
+      , Constructor { constructorName = "KP" , constructorFields = [] }
+      , Constructor { constructorName = "KR" , constructorFields = [] }
+      , Constructor { constructorName = "KW" , constructorFields = [] }
+      , Constructor { constructorName = "KY" , constructorFields = [] }
+      , Constructor { constructorName = "KZ" , constructorFields = [] }
+      , Constructor { constructorName = "LA" , constructorFields = [] }
+      , Constructor { constructorName = "LB" , constructorFields = [] }
+      , Constructor { constructorName = "LC" , constructorFields = [] }
+      , Constructor { constructorName = "LI" , constructorFields = [] }
+      , Constructor { constructorName = "LK" , constructorFields = [] }
+      , Constructor { constructorName = "LR" , constructorFields = [] }
+      , Constructor { constructorName = "LS" , constructorFields = [] }
+      , Constructor { constructorName = "LT" , constructorFields = [] }
+      , Constructor { constructorName = "LU" , constructorFields = [] }
+      , Constructor { constructorName = "LV" , constructorFields = [] }
+      , Constructor { constructorName = "LY" , constructorFields = [] }
+      , Constructor { constructorName = "MA" , constructorFields = [] }
+      , Constructor { constructorName = "MC" , constructorFields = [] }
+      , Constructor { constructorName = "MD" , constructorFields = [] }
+      , Constructor { constructorName = "ME" , constructorFields = [] }
+      , Constructor { constructorName = "MF" , constructorFields = [] }
+      , Constructor { constructorName = "MG" , constructorFields = [] }
+      , Constructor { constructorName = "MH" , constructorFields = [] }
+      , Constructor { constructorName = "MK" , constructorFields = [] }
+      , Constructor { constructorName = "ML" , constructorFields = [] }
+      , Constructor { constructorName = "MM" , constructorFields = [] }
+      , Constructor { constructorName = "MN" , constructorFields = [] }
+      , Constructor { constructorName = "MO" , constructorFields = [] }
+      , Constructor { constructorName = "MP" , constructorFields = [] }
+      , Constructor { constructorName = "MQ" , constructorFields = [] }
+      , Constructor { constructorName = "MR" , constructorFields = [] }
+      , Constructor { constructorName = "MS" , constructorFields = [] }
+      , Constructor { constructorName = "MT" , constructorFields = [] }
+      , Constructor { constructorName = "MU" , constructorFields = [] }
+      , Constructor { constructorName = "MV" , constructorFields = [] }
+      , Constructor { constructorName = "MW" , constructorFields = [] }
+      , Constructor { constructorName = "MX" , constructorFields = [] }
+      , Constructor { constructorName = "MY" , constructorFields = [] }
+      , Constructor { constructorName = "MZ" , constructorFields = [] }
+      , Constructor { constructorName = "NA" , constructorFields = [] }
+      , Constructor { constructorName = "NC" , constructorFields = [] }
+      , Constructor { constructorName = "NE" , constructorFields = [] }
+      , Constructor { constructorName = "NF" , constructorFields = [] }
+      , Constructor { constructorName = "NG" , constructorFields = [] }
+      , Constructor { constructorName = "NI" , constructorFields = [] }
+      , Constructor { constructorName = "NL" , constructorFields = [] }
+      , Constructor { constructorName = "NO" , constructorFields = [] }
+      , Constructor { constructorName = "NP" , constructorFields = [] }
+      , Constructor { constructorName = "NR" , constructorFields = [] }
+      , Constructor { constructorName = "NU" , constructorFields = [] }
+      , Constructor { constructorName = "NZ" , constructorFields = [] }
+      , Constructor { constructorName = "OM" , constructorFields = [] }
+      , Constructor { constructorName = "PA" , constructorFields = [] }
+      , Constructor { constructorName = "PE" , constructorFields = [] }
+      , Constructor { constructorName = "PF" , constructorFields = [] }
+      , Constructor { constructorName = "PG" , constructorFields = [] }
+      , Constructor { constructorName = "PH" , constructorFields = [] }
+      , Constructor { constructorName = "PK" , constructorFields = [] }
+      , Constructor { constructorName = "PL" , constructorFields = [] }
+      , Constructor { constructorName = "PM" , constructorFields = [] }
+      , Constructor { constructorName = "PN" , constructorFields = [] }
+      , Constructor { constructorName = "PR" , constructorFields = [] }
+      , Constructor { constructorName = "PS" , constructorFields = [] }
+      , Constructor { constructorName = "PT" , constructorFields = [] }
+      , Constructor { constructorName = "PW" , constructorFields = [] }
+      , Constructor { constructorName = "PY" , constructorFields = [] }
+      , Constructor { constructorName = "QA" , constructorFields = [] }
+      , Constructor { constructorName = "RE" , constructorFields = [] }
+      , Constructor { constructorName = "RO" , constructorFields = [] }
+      , Constructor { constructorName = "RS" , constructorFields = [] }
+      , Constructor { constructorName = "RU" , constructorFields = [] }
+      , Constructor { constructorName = "RW" , constructorFields = [] }
+      , Constructor { constructorName = "SA" , constructorFields = [] }
+      , Constructor { constructorName = "SB" , constructorFields = [] }
+      , Constructor { constructorName = "SC" , constructorFields = [] }
+      , Constructor { constructorName = "SD" , constructorFields = [] }
+      , Constructor { constructorName = "SE" , constructorFields = [] }
+      , Constructor { constructorName = "SG" , constructorFields = [] }
+      , Constructor { constructorName = "SH" , constructorFields = [] }
+      , Constructor { constructorName = "SI" , constructorFields = [] }
+      , Constructor { constructorName = "SJ" , constructorFields = [] }
+      , Constructor { constructorName = "SK" , constructorFields = [] }
+      , Constructor { constructorName = "SL" , constructorFields = [] }
+      , Constructor { constructorName = "SM" , constructorFields = [] }
+      , Constructor { constructorName = "SN" , constructorFields = [] }
+      , Constructor { constructorName = "SO" , constructorFields = [] }
+      , Constructor { constructorName = "SR" , constructorFields = [] }
+      , Constructor { constructorName = "SS" , constructorFields = [] }
+      , Constructor { constructorName = "ST" , constructorFields = [] }
+      , Constructor { constructorName = "SV" , constructorFields = [] }
+      , Constructor { constructorName = "SX" , constructorFields = [] }
+      , Constructor { constructorName = "SY" , constructorFields = [] }
+      , Constructor { constructorName = "SZ" , constructorFields = [] }
+      , Constructor { constructorName = "TC" , constructorFields = [] }
+      , Constructor { constructorName = "TD" , constructorFields = [] }
+      , Constructor { constructorName = "TF" , constructorFields = [] }
+      , Constructor { constructorName = "TG" , constructorFields = [] }
+      , Constructor { constructorName = "TH" , constructorFields = [] }
+      , Constructor { constructorName = "TJ" , constructorFields = [] }
+      , Constructor { constructorName = "TK" , constructorFields = [] }
+      , Constructor { constructorName = "TL" , constructorFields = [] }
+      , Constructor { constructorName = "TM" , constructorFields = [] }
+      , Constructor { constructorName = "TN" , constructorFields = [] }
+      , Constructor { constructorName = "TO" , constructorFields = [] }
+      , Constructor { constructorName = "TR" , constructorFields = [] }
+      , Constructor { constructorName = "TT" , constructorFields = [] }
+      , Constructor { constructorName = "TV" , constructorFields = [] }
+      , Constructor { constructorName = "TW" , constructorFields = [] }
+      , Constructor { constructorName = "TZ" , constructorFields = [] }
+      , Constructor { constructorName = "UA" , constructorFields = [] }
+      , Constructor { constructorName = "UG" , constructorFields = [] }
+      , Constructor { constructorName = "UM" , constructorFields = [] }
+      , Constructor { constructorName = "US" , constructorFields = [] }
+      , Constructor { constructorName = "UY" , constructorFields = [] }
+      , Constructor { constructorName = "UZ" , constructorFields = [] }
+      , Constructor { constructorName = "VA" , constructorFields = [] }
+      , Constructor { constructorName = "VC" , constructorFields = [] }
+      , Constructor { constructorName = "VE" , constructorFields = [] }
+      , Constructor { constructorName = "VG" , constructorFields = [] }
+      , Constructor { constructorName = "VI" , constructorFields = [] }
+      , Constructor { constructorName = "VN" , constructorFields = [] }
+      , Constructor { constructorName = "VU" , constructorFields = [] }
+      , Constructor { constructorName = "WF" , constructorFields = [] }
+      , Constructor { constructorName = "WS" , constructorFields = [] }
+      , Constructor { constructorName = "YE" , constructorFields = [] }
+      , Constructor { constructorName = "YT" , constructorFields = [] }
+      , Constructor { constructorName = "ZA" , constructorFields = [] }
+      , Constructor { constructorName = "ZM" , constructorFields = [] }
+      , Constructor { constructorName = "ZW" , constructorFields = [] }
+      ]
+  }
diff --git a/test-output/extraction/golden/EmptyAlias.txt b/test-output/extraction/golden/EmptyAlias.txt
new file mode 100644
--- /dev/null
+++ b/test-output/extraction/golden/EmptyAlias.txt
@@ -0,0 +1,28 @@
+DatatypeStructure
+  { mapping =
+      ElmMapping
+        { typeName = "EmptyAlias"
+        , moduleName = Just "Codegen.SampleTypes"
+        , encoderLocation =
+            Just
+              SymbolLocation
+                { symbolName = "encodeEmptyAlias"
+                , symbolModuleName = "Codegen.SampleTypes"
+                }
+        , decoderLocation =
+            Just
+              SymbolLocation
+                { symbolName = "decodeEmptyAlias"
+                , symbolModuleName = "Codegen.SampleTypes"
+                }
+        , args = []
+        , isTypeAlias = True
+        , urlPiece = Nothing
+        , queryParam = Nothing
+        }
+  , nParams = 0
+  , constructors =
+      [ Constructor
+          { constructorName = "EmptyAlias" , constructorFields = [] }
+      ]
+  }
diff --git a/test-output/extraction/golden/Form_Report.txt b/test-output/extraction/golden/Form_Report.txt
new file mode 100644
--- /dev/null
+++ b/test-output/extraction/golden/Form_Report.txt
@@ -0,0 +1,129 @@
+DatatypeStructure
+  { mapping =
+      ElmMapping
+        { typeName = "Form"
+        , moduleName = Just "Codegen.Report"
+        , encoderLocation =
+            Just
+              SymbolLocation
+                { symbolName = "encodeForm" , symbolModuleName = "Codegen.Report" }
+        , decoderLocation =
+            Just
+              SymbolLocation
+                { symbolName = "decodeForm" , symbolModuleName = "Codegen.Report" }
+        , args = []
+        , isTypeAlias = False
+        , urlPiece = Nothing
+        , queryParam = Nothing
+        }
+  , nParams = 0
+  , constructors =
+      [ Constructor
+          { constructorName = "Form"
+          , constructorFields =
+              [ ( Just "userName"
+                , TyRef
+                    { tyCon =
+                        TyMapping
+                          ElmMapping
+                            { typeName = "Maybe"
+                            , moduleName = Just "Maybe"
+                            , encoderLocation =
+                                Just
+                                  SymbolLocation
+                                    { symbolName = "maybe"
+                                    , symbolModuleName = "Json.Encode.Extra"
+                                    }
+                            , decoderLocation =
+                                Just
+                                  SymbolLocation
+                                    { symbolName = "nullable" , symbolModuleName = "Json.Decode" }
+                            , args = []
+                            , isTypeAlias = False
+                            , urlPiece = Nothing
+                            , queryParam = Nothing
+                            }
+                    , tyArgs =
+                        [ TyRef
+                            { tyCon =
+                                TyMapping
+                                  ElmMapping
+                                    { typeName = "String"
+                                    , moduleName = Nothing
+                                    , encoderLocation =
+                                        Just
+                                          SymbolLocation
+                                            { symbolName = "string"
+                                            , symbolModuleName = "Json.Encode"
+                                            }
+                                    , decoderLocation =
+                                        Just
+                                          SymbolLocation
+                                            { symbolName = "string"
+                                            , symbolModuleName = "Json.Decode"
+                                            }
+                                    , args = []
+                                    , isTypeAlias = False
+                                    , urlPiece = Nothing
+                                    , queryParam = Nothing
+                                    }
+                            , tyArgs = []
+                            }
+                        ]
+                    }
+                )
+              , ( Just "upload"
+                , TyRef
+                    { tyCon =
+                        TyMapping
+                          ElmMapping
+                            { typeName = "Maybe"
+                            , moduleName = Just "Maybe"
+                            , encoderLocation =
+                                Just
+                                  SymbolLocation
+                                    { symbolName = "maybe"
+                                    , symbolModuleName = "Json.Encode.Extra"
+                                    }
+                            , decoderLocation =
+                                Just
+                                  SymbolLocation
+                                    { symbolName = "nullable" , symbolModuleName = "Json.Decode" }
+                            , args = []
+                            , isTypeAlias = False
+                            , urlPiece = Nothing
+                            , queryParam = Nothing
+                            }
+                    , tyArgs =
+                        [ TyRef
+                            { tyCon =
+                                TyMapping
+                                  ElmMapping
+                                    { typeName = "FileUpload"
+                                    , moduleName = Just "Codegen.Report"
+                                    , encoderLocation =
+                                        Just
+                                          SymbolLocation
+                                            { symbolName = "encodeFileUpload"
+                                            , symbolModuleName = "Codegen.Report"
+                                            }
+                                    , decoderLocation =
+                                        Just
+                                          SymbolLocation
+                                            { symbolName = "decodeFileUpload"
+                                            , symbolModuleName = "Codegen.Report"
+                                            }
+                                    , args = []
+                                    , isTypeAlias = False
+                                    , urlPiece = Nothing
+                                    , queryParam = Nothing
+                                    }
+                            , tyArgs = []
+                            }
+                        ]
+                    }
+                )
+              ]
+          }
+      ]
+  }
diff --git a/test-output/extraction/golden/Form_Submission.txt b/test-output/extraction/golden/Form_Submission.txt
new file mode 100644
--- /dev/null
+++ b/test-output/extraction/golden/Form_Submission.txt
@@ -0,0 +1,105 @@
+DatatypeStructure
+  { mapping =
+      ElmMapping
+        { typeName = "Form"
+        , moduleName = Just "Codegen.Submission"
+        , encoderLocation =
+            Just
+              SymbolLocation
+                { symbolName = "encodeForm"
+                , symbolModuleName = "Codegen.Submission"
+                }
+        , decoderLocation =
+            Just
+              SymbolLocation
+                { symbolName = "decodeForm"
+                , symbolModuleName = "Codegen.Submission"
+                }
+        , args = []
+        , isTypeAlias = False
+        , urlPiece = Nothing
+        , queryParam = Nothing
+        }
+  , nParams = 0
+  , constructors =
+      [ Constructor
+          { constructorName = "Form"
+          , constructorFields =
+              [ ( Just "userName"
+                , TyRef
+                    { tyCon =
+                        TyMapping
+                          ElmMapping
+                            { typeName = "String"
+                            , moduleName = Nothing
+                            , encoderLocation =
+                                Just
+                                  SymbolLocation
+                                    { symbolName = "string" , symbolModuleName = "Json.Encode" }
+                            , decoderLocation =
+                                Just
+                                  SymbolLocation
+                                    { symbolName = "string" , symbolModuleName = "Json.Decode" }
+                            , args = []
+                            , isTypeAlias = False
+                            , urlPiece = Nothing
+                            , queryParam = Nothing
+                            }
+                    , tyArgs = []
+                    }
+                )
+              , ( Just "upload"
+                , TyRef
+                    { tyCon =
+                        TyMapping
+                          ElmMapping
+                            { typeName = "Maybe"
+                            , moduleName = Just "Maybe"
+                            , encoderLocation =
+                                Just
+                                  SymbolLocation
+                                    { symbolName = "maybe"
+                                    , symbolModuleName = "Json.Encode.Extra"
+                                    }
+                            , decoderLocation =
+                                Just
+                                  SymbolLocation
+                                    { symbolName = "nullable" , symbolModuleName = "Json.Decode" }
+                            , args = []
+                            , isTypeAlias = False
+                            , urlPiece = Nothing
+                            , queryParam = Nothing
+                            }
+                    , tyArgs =
+                        [ TyRef
+                            { tyCon =
+                                TyMapping
+                                  ElmMapping
+                                    { typeName = "FileUpload"
+                                    , moduleName = Just "Codegen.Submission"
+                                    , encoderLocation =
+                                        Just
+                                          SymbolLocation
+                                            { symbolName = "encodeFileUpload"
+                                            , symbolModuleName = "Codegen.Submission"
+                                            }
+                                    , decoderLocation =
+                                        Just
+                                          SymbolLocation
+                                            { symbolName = "decodeFileUpload"
+                                            , symbolModuleName = "Codegen.Submission"
+                                            }
+                                    , args = []
+                                    , isTypeAlias = False
+                                    , urlPiece = Nothing
+                                    , queryParam = Nothing
+                                    }
+                            , tyArgs = []
+                            }
+                        ]
+                    }
+                )
+              ]
+          }
+      ]
+  }
diff --git a/test-output/extraction/golden/HKTWithSpecializedKindStarparams_Int_Text_Maybe.txt b/test-output/extraction/golden/HKTWithSpecializedKindStarparams_Int_Text_Maybe.txt
new file mode 100644
--- /dev/null
+++ b/test-output/extraction/golden/HKTWithSpecializedKindStarparams_Int_Text_Maybe.txt
@@ -0,0 +1,105 @@
+DatatypeStructure
+  { mapping =
+      ElmMapping
+        { typeName = "HKTWithSpecializedKindStarParams"
+        , moduleName = Just "Codegen.SampleTypes"
+        , encoderLocation =
+            Just
+              SymbolLocation
+                { symbolName = "encodeHKTWithSpecializedKindStarParams"
+                , symbolModuleName = "Codegen.SampleTypes"
+                }
+        , decoderLocation =
+            Just
+              SymbolLocation
+                { symbolName = "decodeHKTWithSpecializedKindStarParams"
+                , symbolModuleName = "Codegen.SampleTypes"
+                }
+        , args = []
+        , isTypeAlias = False
+        , urlPiece = Nothing
+        , queryParam = Nothing
+        }
+  , nParams = 0
+  , constructors =
+      [ Constructor
+          { constructorName = "HKTWithSpecializedKindStarParams"
+          , constructorFields =
+              [ ( Nothing
+                , TyRef
+                    { tyCon =
+                        TyMapping
+                          ElmMapping
+                            { typeName = "String"
+                            , moduleName = Nothing
+                            , encoderLocation =
+                                Just
+                                  SymbolLocation
+                                    { symbolName = "string" , symbolModuleName = "Json.Encode" }
+                            , decoderLocation =
+                                Just
+                                  SymbolLocation
+                                    { symbolName = "string" , symbolModuleName = "Json.Decode" }
+                            , args = []
+                            , isTypeAlias = False
+                            , urlPiece = Nothing
+                            , queryParam = Nothing
+                            }
+                    , tyArgs = []
+                    }
+                )
+              , ( Nothing
+                , TyRef
+                    { tyCon =
+                        TyMapping
+                          ElmMapping
+                            { typeName = "Maybe"
+                            , moduleName = Just "Maybe"
+                            , encoderLocation =
+                                Just
+                                  SymbolLocation
+                                    { symbolName = "maybe"
+                                    , symbolModuleName = "Json.Encode.Extra"
+                                    }
+                            , decoderLocation =
+                                Just
+                                  SymbolLocation
+                                    { symbolName = "nullable" , symbolModuleName = "Json.Decode" }
+                            , args = []
+                            , isTypeAlias = False
+                            , urlPiece = Nothing
+                            , queryParam = Nothing
+                            }
+                    , tyArgs =
+                        [ TyRef
+                            { tyCon =
+                                TyMapping
+                                  ElmMapping
+                                    { typeName = "Int"
+                                    , moduleName = Nothing
+                                    , encoderLocation =
+                                        Just
+                                          SymbolLocation
+                                            { symbolName = "int"
+                                            , symbolModuleName = "Json.Encode"
+                                            }
+                                    , decoderLocation =
+                                        Just
+                                          SymbolLocation
+                                            { symbolName = "int"
+                                            , symbolModuleName = "Json.Decode"
+                                            }
+                                    , args = []
+                                    , isTypeAlias = False
+                                    , urlPiece = Nothing
+                                    , queryParam = Nothing
+                                    }
+                            , tyArgs = []
+                            }
+                        ]
+                    }
+                )
+              ]
+          }
+      ]
+  }
diff --git a/test-output/extraction/golden/HKTWithUnspecializedParams_(Either_Int).txt b/test-output/extraction/golden/HKTWithUnspecializedParams_(Either_Int).txt
new file mode 100644
--- /dev/null
+++ b/test-output/extraction/golden/HKTWithUnspecializedParams_(Either_Int).txt
@@ -0,0 +1,188 @@
+DatatypeStructure
+  { mapping =
+      ElmMapping
+        { typeName = "HKTWithUnspecializedParams"
+        , moduleName = Just "Codegen.SampleTypes"
+        , encoderLocation =
+            Just
+              SymbolLocation
+                { symbolName = "encodeHKTWithUnspecializedParams"
+                , symbolModuleName = "Codegen.SampleTypes"
+                }
+        , decoderLocation =
+            Just
+              SymbolLocation
+                { symbolName = "decodeHKTWithUnspecializedParams"
+                , symbolModuleName = "Codegen.SampleTypes"
+                }
+        , args = []
+        , isTypeAlias = False
+        , urlPiece = Nothing
+        , queryParam = Nothing
+        }
+  , nParams = 2
+  , constructors =
+      [ Constructor
+          { constructorName = "HKTWithUnspecializedParams"
+          , constructorFields =
+              [ ( Nothing
+                , TyRef
+                    { tyCon =
+                        TyMapping
+                          ElmMapping
+                            { typeName = "Either"
+                            , moduleName = Just "Codegen.Either"
+                            , encoderLocation =
+                                Just
+                                  SymbolLocation
+                                    { symbolName = "encodeEither"
+                                    , symbolModuleName = "Codegen.Either"
+                                    }
+                            , decoderLocation =
+                                Just
+                                  SymbolLocation
+                                    { symbolName = "decodeEither"
+                                    , symbolModuleName = "Codegen.Either"
+                                    }
+                            , args = []
+                            , isTypeAlias = False
+                            , urlPiece = Nothing
+                            , queryParam = Nothing
+                            }
+                    , tyArgs =
+                        [ TyRef
+                            { tyCon =
+                                TyMapping
+                                  ElmMapping
+                                    { typeName = "Int"
+                                    , moduleName = Nothing
+                                    , encoderLocation =
+                                        Just
+                                          SymbolLocation
+                                            { symbolName = "int"
+                                            , symbolModuleName = "Json.Encode"
+                                            }
+                                    , decoderLocation =
+                                        Just
+                                          SymbolLocation
+                                            { symbolName = "int"
+                                            , symbolModuleName = "Json.Decode"
+                                            }
+                                    , args = []
+                                    , isTypeAlias = False
+                                    , urlPiece = Nothing
+                                    , queryParam = Nothing
+                                    }
+                            , tyArgs = []
+                            }
+                        , TyRef
+                            { tyCon =
+                                TyMapping
+                                  ElmMapping
+                                    { typeName = "Either"
+                                    , moduleName = Just "Codegen.Either"
+                                    , encoderLocation =
+                                        Just
+                                          SymbolLocation
+                                            { symbolName = "encodeEither"
+                                            , symbolModuleName = "Codegen.Either"
+                                            }
+                                    , decoderLocation =
+                                        Just
+                                          SymbolLocation
+                                            { symbolName = "decodeEither"
+                                            , symbolModuleName = "Codegen.Either"
+                                            }
+                                    , args = []
+                                    , isTypeAlias = False
+                                    , urlPiece = Nothing
+                                    , queryParam = Nothing
+                                    }
+                            , tyArgs =
+                                [ TyRef
+                                    { tyCon =
+                                        TyMapping
+                                          ElmMapping
+                                            { typeName = "Int"
+                                            , moduleName = Nothing
+                                            , encoderLocation =
+                                                Just
+                                                  SymbolLocation
+                                                    { symbolName = "int"
+                                                    , symbolModuleName = "Json.Encode"
+                                                    }
+                                            , decoderLocation =
+                                                Just
+                                                  SymbolLocation
+                                                    { symbolName = "int"
+                                                    , symbolModuleName = "Json.Decode"
+                                                    }
+                                            , args = []
+                                            , isTypeAlias = False
+                                            , urlPiece = Nothing
+                                            , queryParam = Nothing
+                                            }
+                                    , tyArgs = []
+                                    }
+                                , TyRef
+                                    { tyCon =
+                                        TyMapping
+                                          ElmMapping
+                                            { typeName = "Either"
+                                            , moduleName = Just "Codegen.Either"
+                                            , encoderLocation =
+                                                Just
+                                                  SymbolLocation
+                                                    { symbolName = "encodeEither"
+                                                    , symbolModuleName = "Codegen.Either"
+                                                    }
+                                            , decoderLocation =
+                                                Just
+                                                  SymbolLocation
+                                                    { symbolName = "decodeEither"
+                                                    , symbolModuleName = "Codegen.Either"
+                                                    }
+                                            , args = []
+                                            , isTypeAlias = False
+                                            , urlPiece = Nothing
+                                            , queryParam = Nothing
+                                            }
+                                    , tyArgs =
+                                        [ TyRef
+                                            { tyCon =
+                                                TyMapping
+                                                  ElmMapping
+                                                    { typeName = "Int"
+                                                    , moduleName = Nothing
+                                                    , encoderLocation =
+                                                        Just
+                                                          SymbolLocation
+                                                            { symbolName = "int"
+                                                            , symbolModuleName = "Json.Encode"
+                                                            }
+                                                    , decoderLocation =
+                                                        Just
+                                                          SymbolLocation
+                                                            { symbolName = "int"
+                                                            , symbolModuleName = "Json.Decode"
+                                                            }
+                                                    , args = []
+                                                    , isTypeAlias = False
+                                                    , urlPiece = Nothing
+                                                    , queryParam = Nothing
+                                                    }
+                                            , tyArgs = []
+                                            }
+                                        , TyRef { tyCon = TyVar "a0" , tyArgs = [] }
+                                        ]
+                                    }
+                                ]
+                            }
+                        ]
+                    }
+                )
+              , ( Nothing , TyRef { tyCon = TyVar "a1" , tyArgs = [] } )
+              ]
+          }
+      ]
+  }
diff --git a/test-output/extraction/golden/LargeRecord.txt b/test-output/extraction/golden/LargeRecord.txt
new file mode 100644
--- /dev/null
+++ b/test-output/extraction/golden/LargeRecord.txt
@@ -0,0 +1,2731 @@
+DatatypeStructure
+  { mapping =
+      ElmMapping
+        { typeName = "LargeRecord"
+        , moduleName = Just "Codegen.SampleTypes"
+        , encoderLocation =
+            Just
+              SymbolLocation
+                { symbolName = "encodeLargeRecord"
+                , symbolModuleName = "Codegen.SampleTypes"
+                }
+        , decoderLocation =
+            Just
+              SymbolLocation
+                { symbolName = "decodeLargeRecord"
+                , symbolModuleName = "Codegen.SampleTypes"
+                }
+        , args = []
+        , isTypeAlias = False
+        , urlPiece = Nothing
+        , queryParam = Nothing
+        }
+  , nParams = 1
+  , constructors =
+      [ Constructor
+          { constructorName = "LargeRecord"
+          , constructorFields =
+              [ ( Just "field0"
+                , TyRef
+                    { tyCon =
+                        TyMapping
+                          ElmMapping
+                            { typeName = "LookMaNoPhantomParam"
+                            , moduleName = Just "Codegen.SampleTypes"
+                            , encoderLocation =
+                                Just
+                                  SymbolLocation
+                                    { symbolName = "encodeNatPhantomParameter"
+                                    , symbolModuleName = "Codegen.SampleTypes"
+                                    }
+                            , decoderLocation =
+                                Just
+                                  SymbolLocation
+                                    { symbolName = "decodeNatPhantomParameter"
+                                    , symbolModuleName = "Codegen.SampleTypes"
+                                    }
+                            , args = []
+                            , isTypeAlias = False
+                            , urlPiece = Nothing
+                            , queryParam = Nothing
+                            }
+                    , tyArgs = [ TyRef { tyCon = TyVar "a0" , tyArgs = [] } ]
+                    }
+                )
+              , ( Just "field1"
+                , TyRef
+                    { tyCon =
+                        TyMapping
+                          ElmMapping
+                            { typeName = "LookMaNoPhantomParam"
+                            , moduleName = Just "Codegen.SampleTypes"
+                            , encoderLocation =
+                                Just
+                                  SymbolLocation
+                                    { symbolName = "encodeNatPhantomParameter"
+                                    , symbolModuleName = "Codegen.SampleTypes"
+                                    }
+                            , decoderLocation =
+                                Just
+                                  SymbolLocation
+                                    { symbolName = "decodeNatPhantomParameter"
+                                    , symbolModuleName = "Codegen.SampleTypes"
+                                    }
+                            , args = []
+                            , isTypeAlias = False
+                            , urlPiece = Nothing
+                            , queryParam = Nothing
+                            }
+                    , tyArgs = [ TyRef { tyCon = TyVar "a0" , tyArgs = [] } ]
+                    }
+                )
+              , ( Just "field2"
+                , TyRef
+                    { tyCon =
+                        TyMapping
+                          ElmMapping
+                            { typeName = "LookMaNoPhantomParam"
+                            , moduleName = Just "Codegen.SampleTypes"
+                            , encoderLocation =
+                                Just
+                                  SymbolLocation
+                                    { symbolName = "encodeNatPhantomParameter"
+                                    , symbolModuleName = "Codegen.SampleTypes"
+                                    }
+                            , decoderLocation =
+                                Just
+                                  SymbolLocation
+                                    { symbolName = "decodeNatPhantomParameter"
+                                    , symbolModuleName = "Codegen.SampleTypes"
+                                    }
+                            , args = []
+                            , isTypeAlias = False
+                            , urlPiece = Nothing
+                            , queryParam = Nothing
+                            }
+                    , tyArgs = [ TyRef { tyCon = TyVar "a0" , tyArgs = [] } ]
+                    }
+                )
+              , ( Just "field3"
+                , TyRef
+                    { tyCon =
+                        TyMapping
+                          ElmMapping
+                            { typeName = "LookMaNoPhantomParam"
+                            , moduleName = Just "Codegen.SampleTypes"
+                            , encoderLocation =
+                                Just
+                                  SymbolLocation
+                                    { symbolName = "encodeNatPhantomParameter"
+                                    , symbolModuleName = "Codegen.SampleTypes"
+                                    }
+                            , decoderLocation =
+                                Just
+                                  SymbolLocation
+                                    { symbolName = "decodeNatPhantomParameter"
+                                    , symbolModuleName = "Codegen.SampleTypes"
+                                    }
+                            , args = []
+                            , isTypeAlias = False
+                            , urlPiece = Nothing
+                            , queryParam = Nothing
+                            }
+                    , tyArgs = [ TyRef { tyCon = TyVar "a0" , tyArgs = [] } ]
+                    }
+                )
+              , ( Just "field4"
+                , TyRef
+                    { tyCon =
+                        TyMapping
+                          ElmMapping
+                            { typeName = "LookMaNoPhantomParam"
+                            , moduleName = Just "Codegen.SampleTypes"
+                            , encoderLocation =
+                                Just
+                                  SymbolLocation
+                                    { symbolName = "encodeNatPhantomParameter"
+                                    , symbolModuleName = "Codegen.SampleTypes"
+                                    }
+                            , decoderLocation =
+                                Just
+                                  SymbolLocation
+                                    { symbolName = "decodeNatPhantomParameter"
+                                    , symbolModuleName = "Codegen.SampleTypes"
+                                    }
+                            , args = []
+                            , isTypeAlias = False
+                            , urlPiece = Nothing
+                            , queryParam = Nothing
+                            }
+                    , tyArgs = [ TyRef { tyCon = TyVar "a0" , tyArgs = [] } ]
+                    }
+                )
+              , ( Just "field5"
+                , TyRef
+                    { tyCon =
+                        TyMapping
+                          ElmMapping
+                            { typeName = "LookMaNoPhantomParam"
+                            , moduleName = Just "Codegen.SampleTypes"
+                            , encoderLocation =
+                                Just
+                                  SymbolLocation
+                                    { symbolName = "encodeNatPhantomParameter"
+                                    , symbolModuleName = "Codegen.SampleTypes"
+                                    }
+                            , decoderLocation =
+                                Just
+                                  SymbolLocation
+                                    { symbolName = "decodeNatPhantomParameter"
+                                    , symbolModuleName = "Codegen.SampleTypes"
+                                    }
+                            , args = []
+                            , isTypeAlias = False
+                            , urlPiece = Nothing
+                            , queryParam = Nothing
+                            }
+                    , tyArgs = [ TyRef { tyCon = TyVar "a0" , tyArgs = [] } ]
+                    }
+                )
+              , ( Just "field6"
+                , TyRef
+                    { tyCon =
+                        TyMapping
+                          ElmMapping
+                            { typeName = "LookMaNoPhantomParam"
+                            , moduleName = Just "Codegen.SampleTypes"
+                            , encoderLocation =
+                                Just
+                                  SymbolLocation
+                                    { symbolName = "encodeNatPhantomParameter"
+                                    , symbolModuleName = "Codegen.SampleTypes"
+                                    }
+                            , decoderLocation =
+                                Just
+                                  SymbolLocation
+                                    { symbolName = "decodeNatPhantomParameter"
+                                    , symbolModuleName = "Codegen.SampleTypes"
+                                    }
+                            , args = []
+                            , isTypeAlias = False
+                            , urlPiece = Nothing
+                            , queryParam = Nothing
+                            }
+                    , tyArgs = [ TyRef { tyCon = TyVar "a0" , tyArgs = [] } ]
+                    }
+                )
+              , ( Just "field7"
+                , TyRef
+                    { tyCon =
+                        TyMapping
+                          ElmMapping
+                            { typeName = "LookMaNoPhantomParam"
+                            , moduleName = Just "Codegen.SampleTypes"
+                            , encoderLocation =
+                                Just
+                                  SymbolLocation
+                                    { symbolName = "encodeNatPhantomParameter"
+                                    , symbolModuleName = "Codegen.SampleTypes"
+                                    }
+                            , decoderLocation =
+                                Just
+                                  SymbolLocation
+                                    { symbolName = "decodeNatPhantomParameter"
+                                    , symbolModuleName = "Codegen.SampleTypes"
+                                    }
+                            , args = []
+                            , isTypeAlias = False
+                            , urlPiece = Nothing
+                            , queryParam = Nothing
+                            }
+                    , tyArgs = [ TyRef { tyCon = TyVar "a0" , tyArgs = [] } ]
+                    }
+                )
+              , ( Just "field8"
+                , TyRef
+                    { tyCon =
+                        TyMapping
+                          ElmMapping
+                            { typeName = "LookMaNoPhantomParam"
+                            , moduleName = Just "Codegen.SampleTypes"
+                            , encoderLocation =
+                                Just
+                                  SymbolLocation
+                                    { symbolName = "encodeNatPhantomParameter"
+                                    , symbolModuleName = "Codegen.SampleTypes"
+                                    }
+                            , decoderLocation =
+                                Just
+                                  SymbolLocation
+                                    { symbolName = "decodeNatPhantomParameter"
+                                    , symbolModuleName = "Codegen.SampleTypes"
+                                    }
+                            , args = []
+                            , isTypeAlias = False
+                            , urlPiece = Nothing
+                            , queryParam = Nothing
+                            }
+                    , tyArgs = [ TyRef { tyCon = TyVar "a0" , tyArgs = [] } ]
+                    }
+                )
+              , ( Just "field9"
+                , TyRef
+                    { tyCon =
+                        TyMapping
+                          ElmMapping
+                            { typeName = "LookMaNoPhantomParam"
+                            , moduleName = Just "Codegen.SampleTypes"
+                            , encoderLocation =
+                                Just
+                                  SymbolLocation
+                                    { symbolName = "encodeNatPhantomParameter"
+                                    , symbolModuleName = "Codegen.SampleTypes"
+                                    }
+                            , decoderLocation =
+                                Just
+                                  SymbolLocation
+                                    { symbolName = "decodeNatPhantomParameter"
+                                    , symbolModuleName = "Codegen.SampleTypes"
+                                    }
+                            , args = []
+                            , isTypeAlias = False
+                            , urlPiece = Nothing
+                            , queryParam = Nothing
+                            }
+                    , tyArgs = [ TyRef { tyCon = TyVar "a0" , tyArgs = [] } ]
+                    }
+                )
+              , ( Just "field10"
+                , TyRef
+                    { tyCon =
+                        TyMapping
+                          ElmMapping
+                            { typeName = "LookMaNoPhantomParam"
+                            , moduleName = Just "Codegen.SampleTypes"
+                            , encoderLocation =
+                                Just
+                                  SymbolLocation
+                                    { symbolName = "encodeNatPhantomParameter"
+                                    , symbolModuleName = "Codegen.SampleTypes"
+                                    }
+                            , decoderLocation =
+                                Just
+                                  SymbolLocation
+                                    { symbolName = "decodeNatPhantomParameter"
+                                    , symbolModuleName = "Codegen.SampleTypes"
+                                    }
+                            , args = []
+                            , isTypeAlias = False
+                            , urlPiece = Nothing
+                            , queryParam = Nothing
+                            }
+                    , tyArgs = [ TyRef { tyCon = TyVar "a0" , tyArgs = [] } ]
+                    }
+                )
+              , ( Just "field11"
+                , TyRef
+                    { tyCon =
+                        TyMapping
+                          ElmMapping
+                            { typeName = "LookMaNoPhantomParam"
+                            , moduleName = Just "Codegen.SampleTypes"
+                            , encoderLocation =
+                                Just
+                                  SymbolLocation
+                                    { symbolName = "encodeNatPhantomParameter"
+                                    , symbolModuleName = "Codegen.SampleTypes"
+                                    }
+                            , decoderLocation =
+                                Just
+                                  SymbolLocation
+                                    { symbolName = "decodeNatPhantomParameter"
+                                    , symbolModuleName = "Codegen.SampleTypes"
+                                    }
+                            , args = []
+                            , isTypeAlias = False
+                            , urlPiece = Nothing
+                            , queryParam = Nothing
+                            }
+                    , tyArgs = [ TyRef { tyCon = TyVar "a0" , tyArgs = [] } ]
+                    }
+                )
+              , ( Just "field12"
+                , TyRef
+                    { tyCon =
+                        TyMapping
+                          ElmMapping
+                            { typeName = "LookMaNoPhantomParam"
+                            , moduleName = Just "Codegen.SampleTypes"
+                            , encoderLocation =
+                                Just
+                                  SymbolLocation
+                                    { symbolName = "encodeNatPhantomParameter"
+                                    , symbolModuleName = "Codegen.SampleTypes"
+                                    }
+                            , decoderLocation =
+                                Just
+                                  SymbolLocation
+                                    { symbolName = "decodeNatPhantomParameter"
+                                    , symbolModuleName = "Codegen.SampleTypes"
+                                    }
+                            , args = []
+                            , isTypeAlias = False
+                            , urlPiece = Nothing
+                            , queryParam = Nothing
+                            }
+                    , tyArgs = [ TyRef { tyCon = TyVar "a0" , tyArgs = [] } ]
+                    }
+                )
+              , ( Just "field13"
+                , TyRef
+                    { tyCon =
+                        TyMapping
+                          ElmMapping
+                            { typeName = "LookMaNoPhantomParam"
+                            , moduleName = Just "Codegen.SampleTypes"
+                            , encoderLocation =
+                                Just
+                                  SymbolLocation
+                                    { symbolName = "encodeNatPhantomParameter"
+                                    , symbolModuleName = "Codegen.SampleTypes"
+                                    }
+                            , decoderLocation =
+                                Just
+                                  SymbolLocation
+                                    { symbolName = "decodeNatPhantomParameter"
+                                    , symbolModuleName = "Codegen.SampleTypes"
+                                    }
+                            , args = []
+                            , isTypeAlias = False
+                            , urlPiece = Nothing
+                            , queryParam = Nothing
+                            }
+                    , tyArgs = [ TyRef { tyCon = TyVar "a0" , tyArgs = [] } ]
+                    }
+                )
+              , ( Just "field14"
+                , TyRef
+                    { tyCon =
+                        TyMapping
+                          ElmMapping
+                            { typeName = "LookMaNoPhantomParam"
+                            , moduleName = Just "Codegen.SampleTypes"
+                            , encoderLocation =
+                                Just
+                                  SymbolLocation
+                                    { symbolName = "encodeNatPhantomParameter"
+                                    , symbolModuleName = "Codegen.SampleTypes"
+                                    }
+                            , decoderLocation =
+                                Just
+                                  SymbolLocation
+                                    { symbolName = "decodeNatPhantomParameter"
+                                    , symbolModuleName = "Codegen.SampleTypes"
+                                    }
+                            , args = []
+                            , isTypeAlias = False
+                            , urlPiece = Nothing
+                            , queryParam = Nothing
+                            }
+                    , tyArgs = [ TyRef { tyCon = TyVar "a0" , tyArgs = [] } ]
+                    }
+                )
+              , ( Just "field15"
+                , TyRef
+                    { tyCon =
+                        TyMapping
+                          ElmMapping
+                            { typeName = "LookMaNoPhantomParam"
+                            , moduleName = Just "Codegen.SampleTypes"
+                            , encoderLocation =
+                                Just
+                                  SymbolLocation
+                                    { symbolName = "encodeNatPhantomParameter"
+                                    , symbolModuleName = "Codegen.SampleTypes"
+                                    }
+                            , decoderLocation =
+                                Just
+                                  SymbolLocation
+                                    { symbolName = "decodeNatPhantomParameter"
+                                    , symbolModuleName = "Codegen.SampleTypes"
+                                    }
+                            , args = []
+                            , isTypeAlias = False
+                            , urlPiece = Nothing
+                            , queryParam = Nothing
+                            }
+                    , tyArgs = [ TyRef { tyCon = TyVar "a0" , tyArgs = [] } ]
+                    }
+                )
+              , ( Just "field16"
+                , TyRef
+                    { tyCon =
+                        TyMapping
+                          ElmMapping
+                            { typeName = "LookMaNoPhantomParam"
+                            , moduleName = Just "Codegen.SampleTypes"
+                            , encoderLocation =
+                                Just
+                                  SymbolLocation
+                                    { symbolName = "encodeNatPhantomParameter"
+                                    , symbolModuleName = "Codegen.SampleTypes"
+                                    }
+                            , decoderLocation =
+                                Just
+                                  SymbolLocation
+                                    { symbolName = "decodeNatPhantomParameter"
+                                    , symbolModuleName = "Codegen.SampleTypes"
+                                    }
+                            , args = []
+                            , isTypeAlias = False
+                            , urlPiece = Nothing
+                            , queryParam = Nothing
+                            }
+                    , tyArgs = [ TyRef { tyCon = TyVar "a0" , tyArgs = [] } ]
+                    }
+                )
+              , ( Just "field17"
+                , TyRef
+                    { tyCon =
+                        TyMapping
+                          ElmMapping
+                            { typeName = "LookMaNoPhantomParam"
+                            , moduleName = Just "Codegen.SampleTypes"
+                            , encoderLocation =
+                                Just
+                                  SymbolLocation
+                                    { symbolName = "encodeNatPhantomParameter"
+                                    , symbolModuleName = "Codegen.SampleTypes"
+                                    }
+                            , decoderLocation =
+                                Just
+                                  SymbolLocation
+                                    { symbolName = "decodeNatPhantomParameter"
+                                    , symbolModuleName = "Codegen.SampleTypes"
+                                    }
+                            , args = []
+                            , isTypeAlias = False
+                            , urlPiece = Nothing
+                            , queryParam = Nothing
+                            }
+                    , tyArgs = [ TyRef { tyCon = TyVar "a0" , tyArgs = [] } ]
+                    }
+                )
+              , ( Just "field18"
+                , TyRef
+                    { tyCon =
+                        TyMapping
+                          ElmMapping
+                            { typeName = "LookMaNoPhantomParam"
+                            , moduleName = Just "Codegen.SampleTypes"
+                            , encoderLocation =
+                                Just
+                                  SymbolLocation
+                                    { symbolName = "encodeNatPhantomParameter"
+                                    , symbolModuleName = "Codegen.SampleTypes"
+                                    }
+                            , decoderLocation =
+                                Just
+                                  SymbolLocation
+                                    { symbolName = "decodeNatPhantomParameter"
+                                    , symbolModuleName = "Codegen.SampleTypes"
+                                    }
+                            , args = []
+                            , isTypeAlias = False
+                            , urlPiece = Nothing
+                            , queryParam = Nothing
+                            }
+                    , tyArgs = [ TyRef { tyCon = TyVar "a0" , tyArgs = [] } ]
+                    }
+                )
+              , ( Just "field19"
+                , TyRef
+                    { tyCon =
+                        TyMapping
+                          ElmMapping
+                            { typeName = "LookMaNoPhantomParam"
+                            , moduleName = Just "Codegen.SampleTypes"
+                            , encoderLocation =
+                                Just
+                                  SymbolLocation
+                                    { symbolName = "encodeNatPhantomParameter"
+                                    , symbolModuleName = "Codegen.SampleTypes"
+                                    }
+                            , decoderLocation =
+                                Just
+                                  SymbolLocation
+                                    { symbolName = "decodeNatPhantomParameter"
+                                    , symbolModuleName = "Codegen.SampleTypes"
+                                    }
+                            , args = []
+                            , isTypeAlias = False
+                            , urlPiece = Nothing
+                            , queryParam = Nothing
+                            }
+                    , tyArgs = [ TyRef { tyCon = TyVar "a0" , tyArgs = [] } ]
+                    }
+                )
+              , ( Just "field20"
+                , TyRef
+                    { tyCon =
+                        TyMapping
+                          ElmMapping
+                            { typeName = "LookMaNoPhantomParam"
+                            , moduleName = Just "Codegen.SampleTypes"
+                            , encoderLocation =
+                                Just
+                                  SymbolLocation
+                                    { symbolName = "encodeNatPhantomParameter"
+                                    , symbolModuleName = "Codegen.SampleTypes"
+                                    }
+                            , decoderLocation =
+                                Just
+                                  SymbolLocation
+                                    { symbolName = "decodeNatPhantomParameter"
+                                    , symbolModuleName = "Codegen.SampleTypes"
+                                    }
+                            , args = []
+                            , isTypeAlias = False
+                            , urlPiece = Nothing
+                            , queryParam = Nothing
+                            }
+                    , tyArgs = [ TyRef { tyCon = TyVar "a0" , tyArgs = [] } ]
+                    }
+                )
+              , ( Just "field21"
+                , TyRef
+                    { tyCon =
+                        TyMapping
+                          ElmMapping
+                            { typeName = "LookMaNoPhantomParam"
+                            , moduleName = Just "Codegen.SampleTypes"
+                            , encoderLocation =
+                                Just
+                                  SymbolLocation
+                                    { symbolName = "encodeNatPhantomParameter"
+                                    , symbolModuleName = "Codegen.SampleTypes"
+                                    }
+                            , decoderLocation =
+                                Just
+                                  SymbolLocation
+                                    { symbolName = "decodeNatPhantomParameter"
+                                    , symbolModuleName = "Codegen.SampleTypes"
+                                    }
+                            , args = []
+                            , isTypeAlias = False
+                            , urlPiece = Nothing
+                            , queryParam = Nothing
+                            }
+                    , tyArgs = [ TyRef { tyCon = TyVar "a0" , tyArgs = [] } ]
+                    }
+                )
+              , ( Just "field22"
+                , TyRef
+                    { tyCon =
+                        TyMapping
+                          ElmMapping
+                            { typeName = "LookMaNoPhantomParam"
+                            , moduleName = Just "Codegen.SampleTypes"
+                            , encoderLocation =
+                                Just
+                                  SymbolLocation
+                                    { symbolName = "encodeNatPhantomParameter"
+                                    , symbolModuleName = "Codegen.SampleTypes"
+                                    }
+                            , decoderLocation =
+                                Just
+                                  SymbolLocation
+                                    { symbolName = "decodeNatPhantomParameter"
+                                    , symbolModuleName = "Codegen.SampleTypes"
+                                    }
+                            , args = []
+                            , isTypeAlias = False
+                            , urlPiece = Nothing
+                            , queryParam = Nothing
+                            }
+                    , tyArgs = [ TyRef { tyCon = TyVar "a0" , tyArgs = [] } ]
+                    }
+                )
+              , ( Just "field23"
+                , TyRef
+                    { tyCon =
+                        TyMapping
+                          ElmMapping
+                            { typeName = "LookMaNoPhantomParam"
+                            , moduleName = Just "Codegen.SampleTypes"
+                            , encoderLocation =
+                                Just
+                                  SymbolLocation
+                                    { symbolName = "encodeNatPhantomParameter"
+                                    , symbolModuleName = "Codegen.SampleTypes"
+                                    }
+                            , decoderLocation =
+                                Just
+                                  SymbolLocation
+                                    { symbolName = "decodeNatPhantomParameter"
+                                    , symbolModuleName = "Codegen.SampleTypes"
+                                    }
+                            , args = []
+                            , isTypeAlias = False
+                            , urlPiece = Nothing
+                            , queryParam = Nothing
+                            }
+                    , tyArgs = [ TyRef { tyCon = TyVar "a0" , tyArgs = [] } ]
+                    }
+                )
+              , ( Just "field24"
+                , TyRef
+                    { tyCon =
+                        TyMapping
+                          ElmMapping
+                            { typeName = "LookMaNoPhantomParam"
+                            , moduleName = Just "Codegen.SampleTypes"
+                            , encoderLocation =
+                                Just
+                                  SymbolLocation
+                                    { symbolName = "encodeNatPhantomParameter"
+                                    , symbolModuleName = "Codegen.SampleTypes"
+                                    }
+                            , decoderLocation =
+                                Just
+                                  SymbolLocation
+                                    { symbolName = "decodeNatPhantomParameter"
+                                    , symbolModuleName = "Codegen.SampleTypes"
+                                    }
+                            , args = []
+                            , isTypeAlias = False
+                            , urlPiece = Nothing
+                            , queryParam = Nothing
+                            }
+                    , tyArgs = [ TyRef { tyCon = TyVar "a0" , tyArgs = [] } ]
+                    }
+                )
+              , ( Just "field25"
+                , TyRef
+                    { tyCon =
+                        TyMapping
+                          ElmMapping
+                            { typeName = "LookMaNoPhantomParam"
+                            , moduleName = Just "Codegen.SampleTypes"
+                            , encoderLocation =
+                                Just
+                                  SymbolLocation
+                                    { symbolName = "encodeNatPhantomParameter"
+                                    , symbolModuleName = "Codegen.SampleTypes"
+                                    }
+                            , decoderLocation =
+                                Just
+                                  SymbolLocation
+                                    { symbolName = "decodeNatPhantomParameter"
+                                    , symbolModuleName = "Codegen.SampleTypes"
+                                    }
+                            , args = []
+                            , isTypeAlias = False
+                            , urlPiece = Nothing
+                            , queryParam = Nothing
+                            }
+                    , tyArgs = [ TyRef { tyCon = TyVar "a0" , tyArgs = [] } ]
+                    }
+                )
+              , ( Just "field26"
+                , TyRef
+                    { tyCon =
+                        TyMapping
+                          ElmMapping
+                            { typeName = "LookMaNoPhantomParam"
+                            , moduleName = Just "Codegen.SampleTypes"
+                            , encoderLocation =
+                                Just
+                                  SymbolLocation
+                                    { symbolName = "encodeNatPhantomParameter"
+                                    , symbolModuleName = "Codegen.SampleTypes"
+                                    }
+                            , decoderLocation =
+                                Just
+                                  SymbolLocation
+                                    { symbolName = "decodeNatPhantomParameter"
+                                    , symbolModuleName = "Codegen.SampleTypes"
+                                    }
+                            , args = []
+                            , isTypeAlias = False
+                            , urlPiece = Nothing
+                            , queryParam = Nothing
+                            }
+                    , tyArgs = [ TyRef { tyCon = TyVar "a0" , tyArgs = [] } ]
+                    }
+                )
+              , ( Just "field27"
+                , TyRef
+                    { tyCon =
+                        TyMapping
+                          ElmMapping
+                            { typeName = "LookMaNoPhantomParam"
+                            , moduleName = Just "Codegen.SampleTypes"
+                            , encoderLocation =
+                                Just
+                                  SymbolLocation
+                                    { symbolName = "encodeNatPhantomParameter"
+                                    , symbolModuleName = "Codegen.SampleTypes"
+                                    }
+                            , decoderLocation =
+                                Just
+                                  SymbolLocation
+                                    { symbolName = "decodeNatPhantomParameter"
+                                    , symbolModuleName = "Codegen.SampleTypes"
+                                    }
+                            , args = []
+                            , isTypeAlias = False
+                            , urlPiece = Nothing
+                            , queryParam = Nothing
+                            }
+                    , tyArgs = [ TyRef { tyCon = TyVar "a0" , tyArgs = [] } ]
+                    }
+                )
+              , ( Just "field28"
+                , TyRef
+                    { tyCon =
+                        TyMapping
+                          ElmMapping
+                            { typeName = "LookMaNoPhantomParam"
+                            , moduleName = Just "Codegen.SampleTypes"
+                            , encoderLocation =
+                                Just
+                                  SymbolLocation
+                                    { symbolName = "encodeNatPhantomParameter"
+                                    , symbolModuleName = "Codegen.SampleTypes"
+                                    }
+                            , decoderLocation =
+                                Just
+                                  SymbolLocation
+                                    { symbolName = "decodeNatPhantomParameter"
+                                    , symbolModuleName = "Codegen.SampleTypes"
+                                    }
+                            , args = []
+                            , isTypeAlias = False
+                            , urlPiece = Nothing
+                            , queryParam = Nothing
+                            }
+                    , tyArgs = [ TyRef { tyCon = TyVar "a0" , tyArgs = [] } ]
+                    }
+                )
+              , ( Just "field29"
+                , TyRef
+                    { tyCon =
+                        TyMapping
+                          ElmMapping
+                            { typeName = "LookMaNoPhantomParam"
+                            , moduleName = Just "Codegen.SampleTypes"
+                            , encoderLocation =
+                                Just
+                                  SymbolLocation
+                                    { symbolName = "encodeNatPhantomParameter"
+                                    , symbolModuleName = "Codegen.SampleTypes"
+                                    }
+                            , decoderLocation =
+                                Just
+                                  SymbolLocation
+                                    { symbolName = "decodeNatPhantomParameter"
+                                    , symbolModuleName = "Codegen.SampleTypes"
+                                    }
+                            , args = []
+                            , isTypeAlias = False
+                            , urlPiece = Nothing
+                            , queryParam = Nothing
+                            }
+                    , tyArgs = [ TyRef { tyCon = TyVar "a0" , tyArgs = [] } ]
+                    }
+                )
+              , ( Just "field30"
+                , TyRef
+                    { tyCon =
+                        TyMapping
+                          ElmMapping
+                            { typeName = "LookMaNoPhantomParam"
+                            , moduleName = Just "Codegen.SampleTypes"
+                            , encoderLocation =
+                                Just
+                                  SymbolLocation
+                                    { symbolName = "encodeNatPhantomParameter"
+                                    , symbolModuleName = "Codegen.SampleTypes"
+                                    }
+                            , decoderLocation =
+                                Just
+                                  SymbolLocation
+                                    { symbolName = "decodeNatPhantomParameter"
+                                    , symbolModuleName = "Codegen.SampleTypes"
+                                    }
+                            , args = []
+                            , isTypeAlias = False
+                            , urlPiece = Nothing
+                            , queryParam = Nothing
+                            }
+                    , tyArgs = [ TyRef { tyCon = TyVar "a0" , tyArgs = [] } ]
+                    }
+                )
+              , ( Just "field31"
+                , TyRef
+                    { tyCon =
+                        TyMapping
+                          ElmMapping
+                            { typeName = "LookMaNoPhantomParam"
+                            , moduleName = Just "Codegen.SampleTypes"
+                            , encoderLocation =
+                                Just
+                                  SymbolLocation
+                                    { symbolName = "encodeNatPhantomParameter"
+                                    , symbolModuleName = "Codegen.SampleTypes"
+                                    }
+                            , decoderLocation =
+                                Just
+                                  SymbolLocation
+                                    { symbolName = "decodeNatPhantomParameter"
+                                    , symbolModuleName = "Codegen.SampleTypes"
+                                    }
+                            , args = []
+                            , isTypeAlias = False
+                            , urlPiece = Nothing
+                            , queryParam = Nothing
+                            }
+                    , tyArgs = [ TyRef { tyCon = TyVar "a0" , tyArgs = [] } ]
+                    }
+                )
+              , ( Just "field32"
+                , TyRef
+                    { tyCon =
+                        TyMapping
+                          ElmMapping
+                            { typeName = "LookMaNoPhantomParam"
+                            , moduleName = Just "Codegen.SampleTypes"
+                            , encoderLocation =
+                                Just
+                                  SymbolLocation
+                                    { symbolName = "encodeNatPhantomParameter"
+                                    , symbolModuleName = "Codegen.SampleTypes"
+                                    }
+                            , decoderLocation =
+                                Just
+                                  SymbolLocation
+                                    { symbolName = "decodeNatPhantomParameter"
+                                    , symbolModuleName = "Codegen.SampleTypes"
+                                    }
+                            , args = []
+                            , isTypeAlias = False
+                            , urlPiece = Nothing
+                            , queryParam = Nothing
+                            }
+                    , tyArgs = [ TyRef { tyCon = TyVar "a0" , tyArgs = [] } ]
+                    }
+                )
+              , ( Just "field33"
+                , TyRef
+                    { tyCon =
+                        TyMapping
+                          ElmMapping
+                            { typeName = "LookMaNoPhantomParam"
+                            , moduleName = Just "Codegen.SampleTypes"
+                            , encoderLocation =
+                                Just
+                                  SymbolLocation
+                                    { symbolName = "encodeNatPhantomParameter"
+                                    , symbolModuleName = "Codegen.SampleTypes"
+                                    }
+                            , decoderLocation =
+                                Just
+                                  SymbolLocation
+                                    { symbolName = "decodeNatPhantomParameter"
+                                    , symbolModuleName = "Codegen.SampleTypes"
+                                    }
+                            , args = []
+                            , isTypeAlias = False
+                            , urlPiece = Nothing
+                            , queryParam = Nothing
+                            }
+                    , tyArgs = [ TyRef { tyCon = TyVar "a0" , tyArgs = [] } ]
+                    }
+                )
+              , ( Just "field34"
+                , TyRef
+                    { tyCon =
+                        TyMapping
+                          ElmMapping
+                            { typeName = "LookMaNoPhantomParam"
+                            , moduleName = Just "Codegen.SampleTypes"
+                            , encoderLocation =
+                                Just
+                                  SymbolLocation
+                                    { symbolName = "encodeNatPhantomParameter"
+                                    , symbolModuleName = "Codegen.SampleTypes"
+                                    }
+                            , decoderLocation =
+                                Just
+                                  SymbolLocation
+                                    { symbolName = "decodeNatPhantomParameter"
+                                    , symbolModuleName = "Codegen.SampleTypes"
+                                    }
+                            , args = []
+                            , isTypeAlias = False
+                            , urlPiece = Nothing
+                            , queryParam = Nothing
+                            }
+                    , tyArgs = [ TyRef { tyCon = TyVar "a0" , tyArgs = [] } ]
+                    }
+                )
+              , ( Just "field35"
+                , TyRef
+                    { tyCon =
+                        TyMapping
+                          ElmMapping
+                            { typeName = "LookMaNoPhantomParam"
+                            , moduleName = Just "Codegen.SampleTypes"
+                            , encoderLocation =
+                                Just
+                                  SymbolLocation
+                                    { symbolName = "encodeNatPhantomParameter"
+                                    , symbolModuleName = "Codegen.SampleTypes"
+                                    }
+                            , decoderLocation =
+                                Just
+                                  SymbolLocation
+                                    { symbolName = "decodeNatPhantomParameter"
+                                    , symbolModuleName = "Codegen.SampleTypes"
+                                    }
+                            , args = []
+                            , isTypeAlias = False
+                            , urlPiece = Nothing
+                            , queryParam = Nothing
+                            }
+                    , tyArgs = [ TyRef { tyCon = TyVar "a0" , tyArgs = [] } ]
+                    }
+                )
+              , ( Just "field36"
+                , TyRef
+                    { tyCon =
+                        TyMapping
+                          ElmMapping
+                            { typeName = "LookMaNoPhantomParam"
+                            , moduleName = Just "Codegen.SampleTypes"
+                            , encoderLocation =
+                                Just
+                                  SymbolLocation
+                                    { symbolName = "encodeNatPhantomParameter"
+                                    , symbolModuleName = "Codegen.SampleTypes"
+                                    }
+                            , decoderLocation =
+                                Just
+                                  SymbolLocation
+                                    { symbolName = "decodeNatPhantomParameter"
+                                    , symbolModuleName = "Codegen.SampleTypes"
+                                    }
+                            , args = []
+                            , isTypeAlias = False
+                            , urlPiece = Nothing
+                            , queryParam = Nothing
+                            }
+                    , tyArgs = [ TyRef { tyCon = TyVar "a0" , tyArgs = [] } ]
+                    }
+                )
+              , ( Just "field37"
+                , TyRef
+                    { tyCon =
+                        TyMapping
+                          ElmMapping
+                            { typeName = "LookMaNoPhantomParam"
+                            , moduleName = Just "Codegen.SampleTypes"
+                            , encoderLocation =
+                                Just
+                                  SymbolLocation
+                                    { symbolName = "encodeNatPhantomParameter"
+                                    , symbolModuleName = "Codegen.SampleTypes"
+                                    }
+                            , decoderLocation =
+                                Just
+                                  SymbolLocation
+                                    { symbolName = "decodeNatPhantomParameter"
+                                    , symbolModuleName = "Codegen.SampleTypes"
+                                    }
+                            , args = []
+                            , isTypeAlias = False
+                            , urlPiece = Nothing
+                            , queryParam = Nothing
+                            }
+                    , tyArgs = [ TyRef { tyCon = TyVar "a0" , tyArgs = [] } ]
+                    }
+                )
+              , ( Just "field38"
+                , TyRef
+                    { tyCon =
+                        TyMapping
+                          ElmMapping
+                            { typeName = "LookMaNoPhantomParam"
+                            , moduleName = Just "Codegen.SampleTypes"
+                            , encoderLocation =
+                                Just
+                                  SymbolLocation
+                                    { symbolName = "encodeNatPhantomParameter"
+                                    , symbolModuleName = "Codegen.SampleTypes"
+                                    }
+                            , decoderLocation =
+                                Just
+                                  SymbolLocation
+                                    { symbolName = "decodeNatPhantomParameter"
+                                    , symbolModuleName = "Codegen.SampleTypes"
+                                    }
+                            , args = []
+                            , isTypeAlias = False
+                            , urlPiece = Nothing
+                            , queryParam = Nothing
+                            }
+                    , tyArgs = [ TyRef { tyCon = TyVar "a0" , tyArgs = [] } ]
+                    }
+                )
+              , ( Just "field39"
+                , TyRef
+                    { tyCon =
+                        TyMapping
+                          ElmMapping
+                            { typeName = "LookMaNoPhantomParam"
+                            , moduleName = Just "Codegen.SampleTypes"
+                            , encoderLocation =
+                                Just
+                                  SymbolLocation
+                                    { symbolName = "encodeNatPhantomParameter"
+                                    , symbolModuleName = "Codegen.SampleTypes"
+                                    }
+                            , decoderLocation =
+                                Just
+                                  SymbolLocation
+                                    { symbolName = "decodeNatPhantomParameter"
+                                    , symbolModuleName = "Codegen.SampleTypes"
+                                    }
+                            , args = []
+                            , isTypeAlias = False
+                            , urlPiece = Nothing
+                            , queryParam = Nothing
+                            }
+                    , tyArgs = [ TyRef { tyCon = TyVar "a0" , tyArgs = [] } ]
+                    }
+                )
+              , ( Just "field40"
+                , TyRef
+                    { tyCon =
+                        TyMapping
+                          ElmMapping
+                            { typeName = "LookMaNoPhantomParam"
+                            , moduleName = Just "Codegen.SampleTypes"
+                            , encoderLocation =
+                                Just
+                                  SymbolLocation
+                                    { symbolName = "encodeNatPhantomParameter"
+                                    , symbolModuleName = "Codegen.SampleTypes"
+                                    }
+                            , decoderLocation =
+                                Just
+                                  SymbolLocation
+                                    { symbolName = "decodeNatPhantomParameter"
+                                    , symbolModuleName = "Codegen.SampleTypes"
+                                    }
+                            , args = []
+                            , isTypeAlias = False
+                            , urlPiece = Nothing
+                            , queryParam = Nothing
+                            }
+                    , tyArgs = [ TyRef { tyCon = TyVar "a0" , tyArgs = [] } ]
+                    }
+                )
+              , ( Just "field41"
+                , TyRef
+                    { tyCon =
+                        TyMapping
+                          ElmMapping
+                            { typeName = "LookMaNoPhantomParam"
+                            , moduleName = Just "Codegen.SampleTypes"
+                            , encoderLocation =
+                                Just
+                                  SymbolLocation
+                                    { symbolName = "encodeNatPhantomParameter"
+                                    , symbolModuleName = "Codegen.SampleTypes"
+                                    }
+                            , decoderLocation =
+                                Just
+                                  SymbolLocation
+                                    { symbolName = "decodeNatPhantomParameter"
+                                    , symbolModuleName = "Codegen.SampleTypes"
+                                    }
+                            , args = []
+                            , isTypeAlias = False
+                            , urlPiece = Nothing
+                            , queryParam = Nothing
+                            }
+                    , tyArgs = [ TyRef { tyCon = TyVar "a0" , tyArgs = [] } ]
+                    }
+                )
+              , ( Just "field42"
+                , TyRef
+                    { tyCon =
+                        TyMapping
+                          ElmMapping
+                            { typeName = "LookMaNoPhantomParam"
+                            , moduleName = Just "Codegen.SampleTypes"
+                            , encoderLocation =
+                                Just
+                                  SymbolLocation
+                                    { symbolName = "encodeNatPhantomParameter"
+                                    , symbolModuleName = "Codegen.SampleTypes"
+                                    }
+                            , decoderLocation =
+                                Just
+                                  SymbolLocation
+                                    { symbolName = "decodeNatPhantomParameter"
+                                    , symbolModuleName = "Codegen.SampleTypes"
+                                    }
+                            , args = []
+                            , isTypeAlias = False
+                            , urlPiece = Nothing
+                            , queryParam = Nothing
+                            }
+                    , tyArgs = [ TyRef { tyCon = TyVar "a0" , tyArgs = [] } ]
+                    }
+                )
+              , ( Just "field43"
+                , TyRef
+                    { tyCon =
+                        TyMapping
+                          ElmMapping
+                            { typeName = "LookMaNoPhantomParam"
+                            , moduleName = Just "Codegen.SampleTypes"
+                            , encoderLocation =
+                                Just
+                                  SymbolLocation
+                                    { symbolName = "encodeNatPhantomParameter"
+                                    , symbolModuleName = "Codegen.SampleTypes"
+                                    }
+                            , decoderLocation =
+                                Just
+                                  SymbolLocation
+                                    { symbolName = "decodeNatPhantomParameter"
+                                    , symbolModuleName = "Codegen.SampleTypes"
+                                    }
+                            , args = []
+                            , isTypeAlias = False
+                            , urlPiece = Nothing
+                            , queryParam = Nothing
+                            }
+                    , tyArgs = [ TyRef { tyCon = TyVar "a0" , tyArgs = [] } ]
+                    }
+                )
+              , ( Just "field44"
+                , TyRef
+                    { tyCon =
+                        TyMapping
+                          ElmMapping
+                            { typeName = "LookMaNoPhantomParam"
+                            , moduleName = Just "Codegen.SampleTypes"
+                            , encoderLocation =
+                                Just
+                                  SymbolLocation
+                                    { symbolName = "encodeNatPhantomParameter"
+                                    , symbolModuleName = "Codegen.SampleTypes"
+                                    }
+                            , decoderLocation =
+                                Just
+                                  SymbolLocation
+                                    { symbolName = "decodeNatPhantomParameter"
+                                    , symbolModuleName = "Codegen.SampleTypes"
+                                    }
+                            , args = []
+                            , isTypeAlias = False
+                            , urlPiece = Nothing
+                            , queryParam = Nothing
+                            }
+                    , tyArgs = [ TyRef { tyCon = TyVar "a0" , tyArgs = [] } ]
+                    }
+                )
+              , ( Just "field45"
+                , TyRef
+                    { tyCon =
+                        TyMapping
+                          ElmMapping
+                            { typeName = "LookMaNoPhantomParam"
+                            , moduleName = Just "Codegen.SampleTypes"
+                            , encoderLocation =
+                                Just
+                                  SymbolLocation
+                                    { symbolName = "encodeNatPhantomParameter"
+                                    , symbolModuleName = "Codegen.SampleTypes"
+                                    }
+                            , decoderLocation =
+                                Just
+                                  SymbolLocation
+                                    { symbolName = "decodeNatPhantomParameter"
+                                    , symbolModuleName = "Codegen.SampleTypes"
+                                    }
+                            , args = []
+                            , isTypeAlias = False
+                            , urlPiece = Nothing
+                            , queryParam = Nothing
+                            }
+                    , tyArgs = [ TyRef { tyCon = TyVar "a0" , tyArgs = [] } ]
+                    }
+                )
+              , ( Just "field46"
+                , TyRef
+                    { tyCon =
+                        TyMapping
+                          ElmMapping
+                            { typeName = "LookMaNoPhantomParam"
+                            , moduleName = Just "Codegen.SampleTypes"
+                            , encoderLocation =
+                                Just
+                                  SymbolLocation
+                                    { symbolName = "encodeNatPhantomParameter"
+                                    , symbolModuleName = "Codegen.SampleTypes"
+                                    }
+                            , decoderLocation =
+                                Just
+                                  SymbolLocation
+                                    { symbolName = "decodeNatPhantomParameter"
+                                    , symbolModuleName = "Codegen.SampleTypes"
+                                    }
+                            , args = []
+                            , isTypeAlias = False
+                            , urlPiece = Nothing
+                            , queryParam = Nothing
+                            }
+                    , tyArgs = [ TyRef { tyCon = TyVar "a0" , tyArgs = [] } ]
+                    }
+                )
+              , ( Just "field47"
+                , TyRef
+                    { tyCon =
+                        TyMapping
+                          ElmMapping
+                            { typeName = "LookMaNoPhantomParam"
+                            , moduleName = Just "Codegen.SampleTypes"
+                            , encoderLocation =
+                                Just
+                                  SymbolLocation
+                                    { symbolName = "encodeNatPhantomParameter"
+                                    , symbolModuleName = "Codegen.SampleTypes"
+                                    }
+                            , decoderLocation =
+                                Just
+                                  SymbolLocation
+                                    { symbolName = "decodeNatPhantomParameter"
+                                    , symbolModuleName = "Codegen.SampleTypes"
+                                    }
+                            , args = []
+                            , isTypeAlias = False
+                            , urlPiece = Nothing
+                            , queryParam = Nothing
+                            }
+                    , tyArgs = [ TyRef { tyCon = TyVar "a0" , tyArgs = [] } ]
+                    }
+                )
+              , ( Just "field48"
+                , TyRef
+                    { tyCon =
+                        TyMapping
+                          ElmMapping
+                            { typeName = "LookMaNoPhantomParam"
+                            , moduleName = Just "Codegen.SampleTypes"
+                            , encoderLocation =
+                                Just
+                                  SymbolLocation
+                                    { symbolName = "encodeNatPhantomParameter"
+                                    , symbolModuleName = "Codegen.SampleTypes"
+                                    }
+                            , decoderLocation =
+                                Just
+                                  SymbolLocation
+                                    { symbolName = "decodeNatPhantomParameter"
+                                    , symbolModuleName = "Codegen.SampleTypes"
+                                    }
+                            , args = []
+                            , isTypeAlias = False
+                            , urlPiece = Nothing
+                            , queryParam = Nothing
+                            }
+                    , tyArgs = [ TyRef { tyCon = TyVar "a0" , tyArgs = [] } ]
+                    }
+                )
+              , ( Just "field49"
+                , TyRef
+                    { tyCon =
+                        TyMapping
+                          ElmMapping
+                            { typeName = "LookMaNoPhantomParam"
+                            , moduleName = Just "Codegen.SampleTypes"
+                            , encoderLocation =
+                                Just
+                                  SymbolLocation
+                                    { symbolName = "encodeNatPhantomParameter"
+                                    , symbolModuleName = "Codegen.SampleTypes"
+                                    }
+                            , decoderLocation =
+                                Just
+                                  SymbolLocation
+                                    { symbolName = "decodeNatPhantomParameter"
+                                    , symbolModuleName = "Codegen.SampleTypes"
+                                    }
+                            , args = []
+                            , isTypeAlias = False
+                            , urlPiece = Nothing
+                            , queryParam = Nothing
+                            }
+                    , tyArgs = [ TyRef { tyCon = TyVar "a0" , tyArgs = [] } ]
+                    }
+                )
+              , ( Just "field50"
+                , TyRef
+                    { tyCon =
+                        TyMapping
+                          ElmMapping
+                            { typeName = "LookMaNoPhantomParam"
+                            , moduleName = Just "Codegen.SampleTypes"
+                            , encoderLocation =
+                                Just
+                                  SymbolLocation
+                                    { symbolName = "encodeNatPhantomParameter"
+                                    , symbolModuleName = "Codegen.SampleTypes"
+                                    }
+                            , decoderLocation =
+                                Just
+                                  SymbolLocation
+                                    { symbolName = "decodeNatPhantomParameter"
+                                    , symbolModuleName = "Codegen.SampleTypes"
+                                    }
+                            , args = []
+                            , isTypeAlias = False
+                            , urlPiece = Nothing
+                            , queryParam = Nothing
+                            }
+                    , tyArgs = [ TyRef { tyCon = TyVar "a0" , tyArgs = [] } ]
+                    }
+                )
+              , ( Just "field51"
+                , TyRef
+                    { tyCon =
+                        TyMapping
+                          ElmMapping
+                            { typeName = "LookMaNoPhantomParam"
+                            , moduleName = Just "Codegen.SampleTypes"
+                            , encoderLocation =
+                                Just
+                                  SymbolLocation
+                                    { symbolName = "encodeNatPhantomParameter"
+                                    , symbolModuleName = "Codegen.SampleTypes"
+                                    }
+                            , decoderLocation =
+                                Just
+                                  SymbolLocation
+                                    { symbolName = "decodeNatPhantomParameter"
+                                    , symbolModuleName = "Codegen.SampleTypes"
+                                    }
+                            , args = []
+                            , isTypeAlias = False
+                            , urlPiece = Nothing
+                            , queryParam = Nothing
+                            }
+                    , tyArgs = [ TyRef { tyCon = TyVar "a0" , tyArgs = [] } ]
+                    }
+                )
+              , ( Just "field52"
+                , TyRef
+                    { tyCon =
+                        TyMapping
+                          ElmMapping
+                            { typeName = "LookMaNoPhantomParam"
+                            , moduleName = Just "Codegen.SampleTypes"
+                            , encoderLocation =
+                                Just
+                                  SymbolLocation
+                                    { symbolName = "encodeNatPhantomParameter"
+                                    , symbolModuleName = "Codegen.SampleTypes"
+                                    }
+                            , decoderLocation =
+                                Just
+                                  SymbolLocation
+                                    { symbolName = "decodeNatPhantomParameter"
+                                    , symbolModuleName = "Codegen.SampleTypes"
+                                    }
+                            , args = []
+                            , isTypeAlias = False
+                            , urlPiece = Nothing
+                            , queryParam = Nothing
+                            }
+                    , tyArgs = [ TyRef { tyCon = TyVar "a0" , tyArgs = [] } ]
+                    }
+                )
+              , ( Just "field53"
+                , TyRef
+                    { tyCon =
+                        TyMapping
+                          ElmMapping
+                            { typeName = "LookMaNoPhantomParam"
+                            , moduleName = Just "Codegen.SampleTypes"
+                            , encoderLocation =
+                                Just
+                                  SymbolLocation
+                                    { symbolName = "encodeNatPhantomParameter"
+                                    , symbolModuleName = "Codegen.SampleTypes"
+                                    }
+                            , decoderLocation =
+                                Just
+                                  SymbolLocation
+                                    { symbolName = "decodeNatPhantomParameter"
+                                    , symbolModuleName = "Codegen.SampleTypes"
+                                    }
+                            , args = []
+                            , isTypeAlias = False
+                            , urlPiece = Nothing
+                            , queryParam = Nothing
+                            }
+                    , tyArgs = [ TyRef { tyCon = TyVar "a0" , tyArgs = [] } ]
+                    }
+                )
+              , ( Just "field54"
+                , TyRef
+                    { tyCon =
+                        TyMapping
+                          ElmMapping
+                            { typeName = "LookMaNoPhantomParam"
+                            , moduleName = Just "Codegen.SampleTypes"
+                            , encoderLocation =
+                                Just
+                                  SymbolLocation
+                                    { symbolName = "encodeNatPhantomParameter"
+                                    , symbolModuleName = "Codegen.SampleTypes"
+                                    }
+                            , decoderLocation =
+                                Just
+                                  SymbolLocation
+                                    { symbolName = "decodeNatPhantomParameter"
+                                    , symbolModuleName = "Codegen.SampleTypes"
+                                    }
+                            , args = []
+                            , isTypeAlias = False
+                            , urlPiece = Nothing
+                            , queryParam = Nothing
+                            }
+                    , tyArgs = [ TyRef { tyCon = TyVar "a0" , tyArgs = [] } ]
+                    }
+                )
+              , ( Just "field55"
+                , TyRef
+                    { tyCon =
+                        TyMapping
+                          ElmMapping
+                            { typeName = "LookMaNoPhantomParam"
+                            , moduleName = Just "Codegen.SampleTypes"
+                            , encoderLocation =
+                                Just
+                                  SymbolLocation
+                                    { symbolName = "encodeNatPhantomParameter"
+                                    , symbolModuleName = "Codegen.SampleTypes"
+                                    }
+                            , decoderLocation =
+                                Just
+                                  SymbolLocation
+                                    { symbolName = "decodeNatPhantomParameter"
+                                    , symbolModuleName = "Codegen.SampleTypes"
+                                    }
+                            , args = []
+                            , isTypeAlias = False
+                            , urlPiece = Nothing
+                            , queryParam = Nothing
+                            }
+                    , tyArgs = [ TyRef { tyCon = TyVar "a0" , tyArgs = [] } ]
+                    }
+                )
+              , ( Just "field56"
+                , TyRef
+                    { tyCon =
+                        TyMapping
+                          ElmMapping
+                            { typeName = "LookMaNoPhantomParam"
+                            , moduleName = Just "Codegen.SampleTypes"
+                            , encoderLocation =
+                                Just
+                                  SymbolLocation
+                                    { symbolName = "encodeNatPhantomParameter"
+                                    , symbolModuleName = "Codegen.SampleTypes"
+                                    }
+                            , decoderLocation =
+                                Just
+                                  SymbolLocation
+                                    { symbolName = "decodeNatPhantomParameter"
+                                    , symbolModuleName = "Codegen.SampleTypes"
+                                    }
+                            , args = []
+                            , isTypeAlias = False
+                            , urlPiece = Nothing
+                            , queryParam = Nothing
+                            }
+                    , tyArgs = [ TyRef { tyCon = TyVar "a0" , tyArgs = [] } ]
+                    }
+                )
+              , ( Just "field57"
+                , TyRef
+                    { tyCon =
+                        TyMapping
+                          ElmMapping
+                            { typeName = "LookMaNoPhantomParam"
+                            , moduleName = Just "Codegen.SampleTypes"
+                            , encoderLocation =
+                                Just
+                                  SymbolLocation
+                                    { symbolName = "encodeNatPhantomParameter"
+                                    , symbolModuleName = "Codegen.SampleTypes"
+                                    }
+                            , decoderLocation =
+                                Just
+                                  SymbolLocation
+                                    { symbolName = "decodeNatPhantomParameter"
+                                    , symbolModuleName = "Codegen.SampleTypes"
+                                    }
+                            , args = []
+                            , isTypeAlias = False
+                            , urlPiece = Nothing
+                            , queryParam = Nothing
+                            }
+                    , tyArgs = [ TyRef { tyCon = TyVar "a0" , tyArgs = [] } ]
+                    }
+                )
+              , ( Just "field58"
+                , TyRef
+                    { tyCon =
+                        TyMapping
+                          ElmMapping
+                            { typeName = "LookMaNoPhantomParam"
+                            , moduleName = Just "Codegen.SampleTypes"
+                            , encoderLocation =
+                                Just
+                                  SymbolLocation
+                                    { symbolName = "encodeNatPhantomParameter"
+                                    , symbolModuleName = "Codegen.SampleTypes"
+                                    }
+                            , decoderLocation =
+                                Just
+                                  SymbolLocation
+                                    { symbolName = "decodeNatPhantomParameter"
+                                    , symbolModuleName = "Codegen.SampleTypes"
+                                    }
+                            , args = []
+                            , isTypeAlias = False
+                            , urlPiece = Nothing
+                            , queryParam = Nothing
+                            }
+                    , tyArgs = [ TyRef { tyCon = TyVar "a0" , tyArgs = [] } ]
+                    }
+                )
+              , ( Just "field59"
+                , TyRef
+                    { tyCon =
+                        TyMapping
+                          ElmMapping
+                            { typeName = "LookMaNoPhantomParam"
+                            , moduleName = Just "Codegen.SampleTypes"
+                            , encoderLocation =
+                                Just
+                                  SymbolLocation
+                                    { symbolName = "encodeNatPhantomParameter"
+                                    , symbolModuleName = "Codegen.SampleTypes"
+                                    }
+                            , decoderLocation =
+                                Just
+                                  SymbolLocation
+                                    { symbolName = "decodeNatPhantomParameter"
+                                    , symbolModuleName = "Codegen.SampleTypes"
+                                    }
+                            , args = []
+                            , isTypeAlias = False
+                            , urlPiece = Nothing
+                            , queryParam = Nothing
+                            }
+                    , tyArgs = [ TyRef { tyCon = TyVar "a0" , tyArgs = [] } ]
+                    }
+                )
+              , ( Just "field60"
+                , TyRef
+                    { tyCon =
+                        TyMapping
+                          ElmMapping
+                            { typeName = "LookMaNoPhantomParam"
+                            , moduleName = Just "Codegen.SampleTypes"
+                            , encoderLocation =
+                                Just
+                                  SymbolLocation
+                                    { symbolName = "encodeNatPhantomParameter"
+                                    , symbolModuleName = "Codegen.SampleTypes"
+                                    }
+                            , decoderLocation =
+                                Just
+                                  SymbolLocation
+                                    { symbolName = "decodeNatPhantomParameter"
+                                    , symbolModuleName = "Codegen.SampleTypes"
+                                    }
+                            , args = []
+                            , isTypeAlias = False
+                            , urlPiece = Nothing
+                            , queryParam = Nothing
+                            }
+                    , tyArgs = [ TyRef { tyCon = TyVar "a0" , tyArgs = [] } ]
+                    }
+                )
+              , ( Just "field61"
+                , TyRef
+                    { tyCon =
+                        TyMapping
+                          ElmMapping
+                            { typeName = "LookMaNoPhantomParam"
+                            , moduleName = Just "Codegen.SampleTypes"
+                            , encoderLocation =
+                                Just
+                                  SymbolLocation
+                                    { symbolName = "encodeNatPhantomParameter"
+                                    , symbolModuleName = "Codegen.SampleTypes"
+                                    }
+                            , decoderLocation =
+                                Just
+                                  SymbolLocation
+                                    { symbolName = "decodeNatPhantomParameter"
+                                    , symbolModuleName = "Codegen.SampleTypes"
+                                    }
+                            , args = []
+                            , isTypeAlias = False
+                            , urlPiece = Nothing
+                            , queryParam = Nothing
+                            }
+                    , tyArgs = [ TyRef { tyCon = TyVar "a0" , tyArgs = [] } ]
+                    }
+                )
+              , ( Just "field62"
+                , TyRef
+                    { tyCon =
+                        TyMapping
+                          ElmMapping
+                            { typeName = "LookMaNoPhantomParam"
+                            , moduleName = Just "Codegen.SampleTypes"
+                            , encoderLocation =
+                                Just
+                                  SymbolLocation
+                                    { symbolName = "encodeNatPhantomParameter"
+                                    , symbolModuleName = "Codegen.SampleTypes"
+                                    }
+                            , decoderLocation =
+                                Just
+                                  SymbolLocation
+                                    { symbolName = "decodeNatPhantomParameter"
+                                    , symbolModuleName = "Codegen.SampleTypes"
+                                    }
+                            , args = []
+                            , isTypeAlias = False
+                            , urlPiece = Nothing
+                            , queryParam = Nothing
+                            }
+                    , tyArgs = [ TyRef { tyCon = TyVar "a0" , tyArgs = [] } ]
+                    }
+                )
+              , ( Just "field63"
+                , TyRef
+                    { tyCon =
+                        TyMapping
+                          ElmMapping
+                            { typeName = "LookMaNoPhantomParam"
+                            , moduleName = Just "Codegen.SampleTypes"
+                            , encoderLocation =
+                                Just
+                                  SymbolLocation
+                                    { symbolName = "encodeNatPhantomParameter"
+                                    , symbolModuleName = "Codegen.SampleTypes"
+                                    }
+                            , decoderLocation =
+                                Just
+                                  SymbolLocation
+                                    { symbolName = "decodeNatPhantomParameter"
+                                    , symbolModuleName = "Codegen.SampleTypes"
+                                    }
+                            , args = []
+                            , isTypeAlias = False
+                            , urlPiece = Nothing
+                            , queryParam = Nothing
+                            }
+                    , tyArgs = [ TyRef { tyCon = TyVar "a0" , tyArgs = [] } ]
+                    }
+                )
+              , ( Just "field64"
+                , TyRef
+                    { tyCon =
+                        TyMapping
+                          ElmMapping
+                            { typeName = "LookMaNoPhantomParam"
+                            , moduleName = Just "Codegen.SampleTypes"
+                            , encoderLocation =
+                                Just
+                                  SymbolLocation
+                                    { symbolName = "encodeNatPhantomParameter"
+                                    , symbolModuleName = "Codegen.SampleTypes"
+                                    }
+                            , decoderLocation =
+                                Just
+                                  SymbolLocation
+                                    { symbolName = "decodeNatPhantomParameter"
+                                    , symbolModuleName = "Codegen.SampleTypes"
+                                    }
+                            , args = []
+                            , isTypeAlias = False
+                            , urlPiece = Nothing
+                            , queryParam = Nothing
+                            }
+                    , tyArgs = [ TyRef { tyCon = TyVar "a0" , tyArgs = [] } ]
+                    }
+                )
+              , ( Just "field65"
+                , TyRef
+                    { tyCon =
+                        TyMapping
+                          ElmMapping
+                            { typeName = "LookMaNoPhantomParam"
+                            , moduleName = Just "Codegen.SampleTypes"
+                            , encoderLocation =
+                                Just
+                                  SymbolLocation
+                                    { symbolName = "encodeNatPhantomParameter"
+                                    , symbolModuleName = "Codegen.SampleTypes"
+                                    }
+                            , decoderLocation =
+                                Just
+                                  SymbolLocation
+                                    { symbolName = "decodeNatPhantomParameter"
+                                    , symbolModuleName = "Codegen.SampleTypes"
+                                    }
+                            , args = []
+                            , isTypeAlias = False
+                            , urlPiece = Nothing
+                            , queryParam = Nothing
+                            }
+                    , tyArgs = [ TyRef { tyCon = TyVar "a0" , tyArgs = [] } ]
+                    }
+                )
+              , ( Just "field66"
+                , TyRef
+                    { tyCon =
+                        TyMapping
+                          ElmMapping
+                            { typeName = "LookMaNoPhantomParam"
+                            , moduleName = Just "Codegen.SampleTypes"
+                            , encoderLocation =
+                                Just
+                                  SymbolLocation
+                                    { symbolName = "encodeNatPhantomParameter"
+                                    , symbolModuleName = "Codegen.SampleTypes"
+                                    }
+                            , decoderLocation =
+                                Just
+                                  SymbolLocation
+                                    { symbolName = "decodeNatPhantomParameter"
+                                    , symbolModuleName = "Codegen.SampleTypes"
+                                    }
+                            , args = []
+                            , isTypeAlias = False
+                            , urlPiece = Nothing
+                            , queryParam = Nothing
+                            }
+                    , tyArgs = [ TyRef { tyCon = TyVar "a0" , tyArgs = [] } ]
+                    }
+                )
+              , ( Just "field67"
+                , TyRef
+                    { tyCon =
+                        TyMapping
+                          ElmMapping
+                            { typeName = "LookMaNoPhantomParam"
+                            , moduleName = Just "Codegen.SampleTypes"
+                            , encoderLocation =
+                                Just
+                                  SymbolLocation
+                                    { symbolName = "encodeNatPhantomParameter"
+                                    , symbolModuleName = "Codegen.SampleTypes"
+                                    }
+                            , decoderLocation =
+                                Just
+                                  SymbolLocation
+                                    { symbolName = "decodeNatPhantomParameter"
+                                    , symbolModuleName = "Codegen.SampleTypes"
+                                    }
+                            , args = []
+                            , isTypeAlias = False
+                            , urlPiece = Nothing
+                            , queryParam = Nothing
+                            }
+                    , tyArgs = [ TyRef { tyCon = TyVar "a0" , tyArgs = [] } ]
+                    }
+                )
+              , ( Just "field68"
+                , TyRef
+                    { tyCon =
+                        TyMapping
+                          ElmMapping
+                            { typeName = "LookMaNoPhantomParam"
+                            , moduleName = Just "Codegen.SampleTypes"
+                            , encoderLocation =
+                                Just
+                                  SymbolLocation
+                                    { symbolName = "encodeNatPhantomParameter"
+                                    , symbolModuleName = "Codegen.SampleTypes"
+                                    }
+                            , decoderLocation =
+                                Just
+                                  SymbolLocation
+                                    { symbolName = "decodeNatPhantomParameter"
+                                    , symbolModuleName = "Codegen.SampleTypes"
+                                    }
+                            , args = []
+                            , isTypeAlias = False
+                            , urlPiece = Nothing
+                            , queryParam = Nothing
+                            }
+                    , tyArgs = [ TyRef { tyCon = TyVar "a0" , tyArgs = [] } ]
+                    }
+                )
+              , ( Just "field69"
+                , TyRef
+                    { tyCon =
+                        TyMapping
+                          ElmMapping
+                            { typeName = "LookMaNoPhantomParam"
+                            , moduleName = Just "Codegen.SampleTypes"
+                            , encoderLocation =
+                                Just
+                                  SymbolLocation
+                                    { symbolName = "encodeNatPhantomParameter"
+                                    , symbolModuleName = "Codegen.SampleTypes"
+                                    }
+                            , decoderLocation =
+                                Just
+                                  SymbolLocation
+                                    { symbolName = "decodeNatPhantomParameter"
+                                    , symbolModuleName = "Codegen.SampleTypes"
+                                    }
+                            , args = []
+                            , isTypeAlias = False
+                            , urlPiece = Nothing
+                            , queryParam = Nothing
+                            }
+                    , tyArgs = [ TyRef { tyCon = TyVar "a0" , tyArgs = [] } ]
+                    }
+                )
+              , ( Just "field70"
+                , TyRef
+                    { tyCon =
+                        TyMapping
+                          ElmMapping
+                            { typeName = "LookMaNoPhantomParam"
+                            , moduleName = Just "Codegen.SampleTypes"
+                            , encoderLocation =
+                                Just
+                                  SymbolLocation
+                                    { symbolName = "encodeNatPhantomParameter"
+                                    , symbolModuleName = "Codegen.SampleTypes"
+                                    }
+                            , decoderLocation =
+                                Just
+                                  SymbolLocation
+                                    { symbolName = "decodeNatPhantomParameter"
+                                    , symbolModuleName = "Codegen.SampleTypes"
+                                    }
+                            , args = []
+                            , isTypeAlias = False
+                            , urlPiece = Nothing
+                            , queryParam = Nothing
+                            }
+                    , tyArgs = [ TyRef { tyCon = TyVar "a0" , tyArgs = [] } ]
+                    }
+                )
+              , ( Just "field71"
+                , TyRef
+                    { tyCon =
+                        TyMapping
+                          ElmMapping
+                            { typeName = "LookMaNoPhantomParam"
+                            , moduleName = Just "Codegen.SampleTypes"
+                            , encoderLocation =
+                                Just
+                                  SymbolLocation
+                                    { symbolName = "encodeNatPhantomParameter"
+                                    , symbolModuleName = "Codegen.SampleTypes"
+                                    }
+                            , decoderLocation =
+                                Just
+                                  SymbolLocation
+                                    { symbolName = "decodeNatPhantomParameter"
+                                    , symbolModuleName = "Codegen.SampleTypes"
+                                    }
+                            , args = []
+                            , isTypeAlias = False
+                            , urlPiece = Nothing
+                            , queryParam = Nothing
+                            }
+                    , tyArgs = [ TyRef { tyCon = TyVar "a0" , tyArgs = [] } ]
+                    }
+                )
+              , ( Just "field72"
+                , TyRef
+                    { tyCon =
+                        TyMapping
+                          ElmMapping
+                            { typeName = "LookMaNoPhantomParam"
+                            , moduleName = Just "Codegen.SampleTypes"
+                            , encoderLocation =
+                                Just
+                                  SymbolLocation
+                                    { symbolName = "encodeNatPhantomParameter"
+                                    , symbolModuleName = "Codegen.SampleTypes"
+                                    }
+                            , decoderLocation =
+                                Just
+                                  SymbolLocation
+                                    { symbolName = "decodeNatPhantomParameter"
+                                    , symbolModuleName = "Codegen.SampleTypes"
+                                    }
+                            , args = []
+                            , isTypeAlias = False
+                            , urlPiece = Nothing
+                            , queryParam = Nothing
+                            }
+                    , tyArgs = [ TyRef { tyCon = TyVar "a0" , tyArgs = [] } ]
+                    }
+                )
+              , ( Just "field73"
+                , TyRef
+                    { tyCon =
+                        TyMapping
+                          ElmMapping
+                            { typeName = "LookMaNoPhantomParam"
+                            , moduleName = Just "Codegen.SampleTypes"
+                            , encoderLocation =
+                                Just
+                                  SymbolLocation
+                                    { symbolName = "encodeNatPhantomParameter"
+                                    , symbolModuleName = "Codegen.SampleTypes"
+                                    }
+                            , decoderLocation =
+                                Just
+                                  SymbolLocation
+                                    { symbolName = "decodeNatPhantomParameter"
+                                    , symbolModuleName = "Codegen.SampleTypes"
+                                    }
+                            , args = []
+                            , isTypeAlias = False
+                            , urlPiece = Nothing
+                            , queryParam = Nothing
+                            }
+                    , tyArgs = [ TyRef { tyCon = TyVar "a0" , tyArgs = [] } ]
+                    }
+                )
+              , ( Just "field74"
+                , TyRef
+                    { tyCon =
+                        TyMapping
+                          ElmMapping
+                            { typeName = "LookMaNoPhantomParam"
+                            , moduleName = Just "Codegen.SampleTypes"
+                            , encoderLocation =
+                                Just
+                                  SymbolLocation
+                                    { symbolName = "encodeNatPhantomParameter"
+                                    , symbolModuleName = "Codegen.SampleTypes"
+                                    }
+                            , decoderLocation =
+                                Just
+                                  SymbolLocation
+                                    { symbolName = "decodeNatPhantomParameter"
+                                    , symbolModuleName = "Codegen.SampleTypes"
+                                    }
+                            , args = []
+                            , isTypeAlias = False
+                            , urlPiece = Nothing
+                            , queryParam = Nothing
+                            }
+                    , tyArgs = [ TyRef { tyCon = TyVar "a0" , tyArgs = [] } ]
+                    }
+                )
+              , ( Just "field75"
+                , TyRef
+                    { tyCon =
+                        TyMapping
+                          ElmMapping
+                            { typeName = "LookMaNoPhantomParam"
+                            , moduleName = Just "Codegen.SampleTypes"
+                            , encoderLocation =
+                                Just
+                                  SymbolLocation
+                                    { symbolName = "encodeNatPhantomParameter"
+                                    , symbolModuleName = "Codegen.SampleTypes"
+                                    }
+                            , decoderLocation =
+                                Just
+                                  SymbolLocation
+                                    { symbolName = "decodeNatPhantomParameter"
+                                    , symbolModuleName = "Codegen.SampleTypes"
+                                    }
+                            , args = []
+                            , isTypeAlias = False
+                            , urlPiece = Nothing
+                            , queryParam = Nothing
+                            }
+                    , tyArgs = [ TyRef { tyCon = TyVar "a0" , tyArgs = [] } ]
+                    }
+                )
+              , ( Just "field76"
+                , TyRef
+                    { tyCon =
+                        TyMapping
+                          ElmMapping
+                            { typeName = "LookMaNoPhantomParam"
+                            , moduleName = Just "Codegen.SampleTypes"
+                            , encoderLocation =
+                                Just
+                                  SymbolLocation
+                                    { symbolName = "encodeNatPhantomParameter"
+                                    , symbolModuleName = "Codegen.SampleTypes"
+                                    }
+                            , decoderLocation =
+                                Just
+                                  SymbolLocation
+                                    { symbolName = "decodeNatPhantomParameter"
+                                    , symbolModuleName = "Codegen.SampleTypes"
+                                    }
+                            , args = []
+                            , isTypeAlias = False
+                            , urlPiece = Nothing
+                            , queryParam = Nothing
+                            }
+                    , tyArgs = [ TyRef { tyCon = TyVar "a0" , tyArgs = [] } ]
+                    }
+                )
+              , ( Just "field77"
+                , TyRef
+                    { tyCon =
+                        TyMapping
+                          ElmMapping
+                            { typeName = "LookMaNoPhantomParam"
+                            , moduleName = Just "Codegen.SampleTypes"
+                            , encoderLocation =
+                                Just
+                                  SymbolLocation
+                                    { symbolName = "encodeNatPhantomParameter"
+                                    , symbolModuleName = "Codegen.SampleTypes"
+                                    }
+                            , decoderLocation =
+                                Just
+                                  SymbolLocation
+                                    { symbolName = "decodeNatPhantomParameter"
+                                    , symbolModuleName = "Codegen.SampleTypes"
+                                    }
+                            , args = []
+                            , isTypeAlias = False
+                            , urlPiece = Nothing
+                            , queryParam = Nothing
+                            }
+                    , tyArgs = [ TyRef { tyCon = TyVar "a0" , tyArgs = [] } ]
+                    }
+                )
+              , ( Just "field78"
+                , TyRef
+                    { tyCon =
+                        TyMapping
+                          ElmMapping
+                            { typeName = "LookMaNoPhantomParam"
+                            , moduleName = Just "Codegen.SampleTypes"
+                            , encoderLocation =
+                                Just
+                                  SymbolLocation
+                                    { symbolName = "encodeNatPhantomParameter"
+                                    , symbolModuleName = "Codegen.SampleTypes"
+                                    }
+                            , decoderLocation =
+                                Just
+                                  SymbolLocation
+                                    { symbolName = "decodeNatPhantomParameter"
+                                    , symbolModuleName = "Codegen.SampleTypes"
+                                    }
+                            , args = []
+                            , isTypeAlias = False
+                            , urlPiece = Nothing
+                            , queryParam = Nothing
+                            }
+                    , tyArgs = [ TyRef { tyCon = TyVar "a0" , tyArgs = [] } ]
+                    }
+                )
+              , ( Just "field79"
+                , TyRef
+                    { tyCon =
+                        TyMapping
+                          ElmMapping
+                            { typeName = "LookMaNoPhantomParam"
+                            , moduleName = Just "Codegen.SampleTypes"
+                            , encoderLocation =
+                                Just
+                                  SymbolLocation
+                                    { symbolName = "encodeNatPhantomParameter"
+                                    , symbolModuleName = "Codegen.SampleTypes"
+                                    }
+                            , decoderLocation =
+                                Just
+                                  SymbolLocation
+                                    { symbolName = "decodeNatPhantomParameter"
+                                    , symbolModuleName = "Codegen.SampleTypes"
+                                    }
+                            , args = []
+                            , isTypeAlias = False
+                            , urlPiece = Nothing
+                            , queryParam = Nothing
+                            }
+                    , tyArgs = [ TyRef { tyCon = TyVar "a0" , tyArgs = [] } ]
+                    }
+                )
+              , ( Just "field80"
+                , TyRef
+                    { tyCon =
+                        TyMapping
+                          ElmMapping
+                            { typeName = "LookMaNoPhantomParam"
+                            , moduleName = Just "Codegen.SampleTypes"
+                            , encoderLocation =
+                                Just
+                                  SymbolLocation
+                                    { symbolName = "encodeNatPhantomParameter"
+                                    , symbolModuleName = "Codegen.SampleTypes"
+                                    }
+                            , decoderLocation =
+                                Just
+                                  SymbolLocation
+                                    { symbolName = "decodeNatPhantomParameter"
+                                    , symbolModuleName = "Codegen.SampleTypes"
+                                    }
+                            , args = []
+                            , isTypeAlias = False
+                            , urlPiece = Nothing
+                            , queryParam = Nothing
+                            }
+                    , tyArgs = [ TyRef { tyCon = TyVar "a0" , tyArgs = [] } ]
+                    }
+                )
+              , ( Just "field81"
+                , TyRef
+                    { tyCon =
+                        TyMapping
+                          ElmMapping
+                            { typeName = "LookMaNoPhantomParam"
+                            , moduleName = Just "Codegen.SampleTypes"
+                            , encoderLocation =
+                                Just
+                                  SymbolLocation
+                                    { symbolName = "encodeNatPhantomParameter"
+                                    , symbolModuleName = "Codegen.SampleTypes"
+                                    }
+                            , decoderLocation =
+                                Just
+                                  SymbolLocation
+                                    { symbolName = "decodeNatPhantomParameter"
+                                    , symbolModuleName = "Codegen.SampleTypes"
+                                    }
+                            , args = []
+                            , isTypeAlias = False
+                            , urlPiece = Nothing
+                            , queryParam = Nothing
+                            }
+                    , tyArgs = [ TyRef { tyCon = TyVar "a0" , tyArgs = [] } ]
+                    }
+                )
+              , ( Just "field82"
+                , TyRef
+                    { tyCon =
+                        TyMapping
+                          ElmMapping
+                            { typeName = "LookMaNoPhantomParam"
+                            , moduleName = Just "Codegen.SampleTypes"
+                            , encoderLocation =
+                                Just
+                                  SymbolLocation
+                                    { symbolName = "encodeNatPhantomParameter"
+                                    , symbolModuleName = "Codegen.SampleTypes"
+                                    }
+                            , decoderLocation =
+                                Just
+                                  SymbolLocation
+                                    { symbolName = "decodeNatPhantomParameter"
+                                    , symbolModuleName = "Codegen.SampleTypes"
+                                    }
+                            , args = []
+                            , isTypeAlias = False
+                            , urlPiece = Nothing
+                            , queryParam = Nothing
+                            }
+                    , tyArgs = [ TyRef { tyCon = TyVar "a0" , tyArgs = [] } ]
+                    }
+                )
+              , ( Just "field83"
+                , TyRef
+                    { tyCon =
+                        TyMapping
+                          ElmMapping
+                            { typeName = "LookMaNoPhantomParam"
+                            , moduleName = Just "Codegen.SampleTypes"
+                            , encoderLocation =
+                                Just
+                                  SymbolLocation
+                                    { symbolName = "encodeNatPhantomParameter"
+                                    , symbolModuleName = "Codegen.SampleTypes"
+                                    }
+                            , decoderLocation =
+                                Just
+                                  SymbolLocation
+                                    { symbolName = "decodeNatPhantomParameter"
+                                    , symbolModuleName = "Codegen.SampleTypes"
+                                    }
+                            , args = []
+                            , isTypeAlias = False
+                            , urlPiece = Nothing
+                            , queryParam = Nothing
+                            }
+                    , tyArgs = [ TyRef { tyCon = TyVar "a0" , tyArgs = [] } ]
+                    }
+                )
+              , ( Just "field84"
+                , TyRef
+                    { tyCon =
+                        TyMapping
+                          ElmMapping
+                            { typeName = "LookMaNoPhantomParam"
+                            , moduleName = Just "Codegen.SampleTypes"
+                            , encoderLocation =
+                                Just
+                                  SymbolLocation
+                                    { symbolName = "encodeNatPhantomParameter"
+                                    , symbolModuleName = "Codegen.SampleTypes"
+                                    }
+                            , decoderLocation =
+                                Just
+                                  SymbolLocation
+                                    { symbolName = "decodeNatPhantomParameter"
+                                    , symbolModuleName = "Codegen.SampleTypes"
+                                    }
+                            , args = []
+                            , isTypeAlias = False
+                            , urlPiece = Nothing
+                            , queryParam = Nothing
+                            }
+                    , tyArgs = [ TyRef { tyCon = TyVar "a0" , tyArgs = [] } ]
+                    }
+                )
+              , ( Just "field85"
+                , TyRef
+                    { tyCon =
+                        TyMapping
+                          ElmMapping
+                            { typeName = "LookMaNoPhantomParam"
+                            , moduleName = Just "Codegen.SampleTypes"
+                            , encoderLocation =
+                                Just
+                                  SymbolLocation
+                                    { symbolName = "encodeNatPhantomParameter"
+                                    , symbolModuleName = "Codegen.SampleTypes"
+                                    }
+                            , decoderLocation =
+                                Just
+                                  SymbolLocation
+                                    { symbolName = "decodeNatPhantomParameter"
+                                    , symbolModuleName = "Codegen.SampleTypes"
+                                    }
+                            , args = []
+                            , isTypeAlias = False
+                            , urlPiece = Nothing
+                            , queryParam = Nothing
+                            }
+                    , tyArgs = [ TyRef { tyCon = TyVar "a0" , tyArgs = [] } ]
+                    }
+                )
+              , ( Just "field86"
+                , TyRef
+                    { tyCon =
+                        TyMapping
+                          ElmMapping
+                            { typeName = "LookMaNoPhantomParam"
+                            , moduleName = Just "Codegen.SampleTypes"
+                            , encoderLocation =
+                                Just
+                                  SymbolLocation
+                                    { symbolName = "encodeNatPhantomParameter"
+                                    , symbolModuleName = "Codegen.SampleTypes"
+                                    }
+                            , decoderLocation =
+                                Just
+                                  SymbolLocation
+                                    { symbolName = "decodeNatPhantomParameter"
+                                    , symbolModuleName = "Codegen.SampleTypes"
+                                    }
+                            , args = []
+                            , isTypeAlias = False
+                            , urlPiece = Nothing
+                            , queryParam = Nothing
+                            }
+                    , tyArgs = [ TyRef { tyCon = TyVar "a0" , tyArgs = [] } ]
+                    }
+                )
+              , ( Just "field87"
+                , TyRef
+                    { tyCon =
+                        TyMapping
+                          ElmMapping
+                            { typeName = "LookMaNoPhantomParam"
+                            , moduleName = Just "Codegen.SampleTypes"
+                            , encoderLocation =
+                                Just
+                                  SymbolLocation
+                                    { symbolName = "encodeNatPhantomParameter"
+                                    , symbolModuleName = "Codegen.SampleTypes"
+                                    }
+                            , decoderLocation =
+                                Just
+                                  SymbolLocation
+                                    { symbolName = "decodeNatPhantomParameter"
+                                    , symbolModuleName = "Codegen.SampleTypes"
+                                    }
+                            , args = []
+                            , isTypeAlias = False
+                            , urlPiece = Nothing
+                            , queryParam = Nothing
+                            }
+                    , tyArgs = [ TyRef { tyCon = TyVar "a0" , tyArgs = [] } ]
+                    }
+                )
+              , ( Just "field88"
+                , TyRef
+                    { tyCon =
+                        TyMapping
+                          ElmMapping
+                            { typeName = "LookMaNoPhantomParam"
+                            , moduleName = Just "Codegen.SampleTypes"
+                            , encoderLocation =
+                                Just
+                                  SymbolLocation
+                                    { symbolName = "encodeNatPhantomParameter"
+                                    , symbolModuleName = "Codegen.SampleTypes"
+                                    }
+                            , decoderLocation =
+                                Just
+                                  SymbolLocation
+                                    { symbolName = "decodeNatPhantomParameter"
+                                    , symbolModuleName = "Codegen.SampleTypes"
+                                    }
+                            , args = []
+                            , isTypeAlias = False
+                            , urlPiece = Nothing
+                            , queryParam = Nothing
+                            }
+                    , tyArgs = [ TyRef { tyCon = TyVar "a0" , tyArgs = [] } ]
+                    }
+                )
+              , ( Just "field89"
+                , TyRef
+                    { tyCon =
+                        TyMapping
+                          ElmMapping
+                            { typeName = "LookMaNoPhantomParam"
+                            , moduleName = Just "Codegen.SampleTypes"
+                            , encoderLocation =
+                                Just
+                                  SymbolLocation
+                                    { symbolName = "encodeNatPhantomParameter"
+                                    , symbolModuleName = "Codegen.SampleTypes"
+                                    }
+                            , decoderLocation =
+                                Just
+                                  SymbolLocation
+                                    { symbolName = "decodeNatPhantomParameter"
+                                    , symbolModuleName = "Codegen.SampleTypes"
+                                    }
+                            , args = []
+                            , isTypeAlias = False
+                            , urlPiece = Nothing
+                            , queryParam = Nothing
+                            }
+                    , tyArgs = [ TyRef { tyCon = TyVar "a0" , tyArgs = [] } ]
+                    }
+                )
+              , ( Just "field90"
+                , TyRef
+                    { tyCon =
+                        TyMapping
+                          ElmMapping
+                            { typeName = "LookMaNoPhantomParam"
+                            , moduleName = Just "Codegen.SampleTypes"
+                            , encoderLocation =
+                                Just
+                                  SymbolLocation
+                                    { symbolName = "encodeNatPhantomParameter"
+                                    , symbolModuleName = "Codegen.SampleTypes"
+                                    }
+                            , decoderLocation =
+                                Just
+                                  SymbolLocation
+                                    { symbolName = "decodeNatPhantomParameter"
+                                    , symbolModuleName = "Codegen.SampleTypes"
+                                    }
+                            , args = []
+                            , isTypeAlias = False
+                            , urlPiece = Nothing
+                            , queryParam = Nothing
+                            }
+                    , tyArgs = [ TyRef { tyCon = TyVar "a0" , tyArgs = [] } ]
+                    }
+                )
+              , ( Just "field91"
+                , TyRef
+                    { tyCon =
+                        TyMapping
+                          ElmMapping
+                            { typeName = "LookMaNoPhantomParam"
+                            , moduleName = Just "Codegen.SampleTypes"
+                            , encoderLocation =
+                                Just
+                                  SymbolLocation
+                                    { symbolName = "encodeNatPhantomParameter"
+                                    , symbolModuleName = "Codegen.SampleTypes"
+                                    }
+                            , decoderLocation =
+                                Just
+                                  SymbolLocation
+                                    { symbolName = "decodeNatPhantomParameter"
+                                    , symbolModuleName = "Codegen.SampleTypes"
+                                    }
+                            , args = []
+                            , isTypeAlias = False
+                            , urlPiece = Nothing
+                            , queryParam = Nothing
+                            }
+                    , tyArgs = [ TyRef { tyCon = TyVar "a0" , tyArgs = [] } ]
+                    }
+                )
+              , ( Just "field92"
+                , TyRef
+                    { tyCon =
+                        TyMapping
+                          ElmMapping
+                            { typeName = "LookMaNoPhantomParam"
+                            , moduleName = Just "Codegen.SampleTypes"
+                            , encoderLocation =
+                                Just
+                                  SymbolLocation
+                                    { symbolName = "encodeNatPhantomParameter"
+                                    , symbolModuleName = "Codegen.SampleTypes"
+                                    }
+                            , decoderLocation =
+                                Just
+                                  SymbolLocation
+                                    { symbolName = "decodeNatPhantomParameter"
+                                    , symbolModuleName = "Codegen.SampleTypes"
+                                    }
+                            , args = []
+                            , isTypeAlias = False
+                            , urlPiece = Nothing
+                            , queryParam = Nothing
+                            }
+                    , tyArgs = [ TyRef { tyCon = TyVar "a0" , tyArgs = [] } ]
+                    }
+                )
+              , ( Just "field93"
+                , TyRef
+                    { tyCon =
+                        TyMapping
+                          ElmMapping
+                            { typeName = "LookMaNoPhantomParam"
+                            , moduleName = Just "Codegen.SampleTypes"
+                            , encoderLocation =
+                                Just
+                                  SymbolLocation
+                                    { symbolName = "encodeNatPhantomParameter"
+                                    , symbolModuleName = "Codegen.SampleTypes"
+                                    }
+                            , decoderLocation =
+                                Just
+                                  SymbolLocation
+                                    { symbolName = "decodeNatPhantomParameter"
+                                    , symbolModuleName = "Codegen.SampleTypes"
+                                    }
+                            , args = []
+                            , isTypeAlias = False
+                            , urlPiece = Nothing
+                            , queryParam = Nothing
+                            }
+                    , tyArgs = [ TyRef { tyCon = TyVar "a0" , tyArgs = [] } ]
+                    }
+                )
+              , ( Just "field94"
+                , TyRef
+                    { tyCon =
+                        TyMapping
+                          ElmMapping
+                            { typeName = "LookMaNoPhantomParam"
+                            , moduleName = Just "Codegen.SampleTypes"
+                            , encoderLocation =
+                                Just
+                                  SymbolLocation
+                                    { symbolName = "encodeNatPhantomParameter"
+                                    , symbolModuleName = "Codegen.SampleTypes"
+                                    }
+                            , decoderLocation =
+                                Just
+                                  SymbolLocation
+                                    { symbolName = "decodeNatPhantomParameter"
+                                    , symbolModuleName = "Codegen.SampleTypes"
+                                    }
+                            , args = []
+                            , isTypeAlias = False
+                            , urlPiece = Nothing
+                            , queryParam = Nothing
+                            }
+                    , tyArgs = [ TyRef { tyCon = TyVar "a0" , tyArgs = [] } ]
+                    }
+                )
+              , ( Just "field95"
+                , TyRef
+                    { tyCon =
+                        TyMapping
+                          ElmMapping
+                            { typeName = "LookMaNoPhantomParam"
+                            , moduleName = Just "Codegen.SampleTypes"
+                            , encoderLocation =
+                                Just
+                                  SymbolLocation
+                                    { symbolName = "encodeNatPhantomParameter"
+                                    , symbolModuleName = "Codegen.SampleTypes"
+                                    }
+                            , decoderLocation =
+                                Just
+                                  SymbolLocation
+                                    { symbolName = "decodeNatPhantomParameter"
+                                    , symbolModuleName = "Codegen.SampleTypes"
+                                    }
+                            , args = []
+                            , isTypeAlias = False
+                            , urlPiece = Nothing
+                            , queryParam = Nothing
+                            }
+                    , tyArgs = [ TyRef { tyCon = TyVar "a0" , tyArgs = [] } ]
+                    }
+                )
+              , ( Just "field96"
+                , TyRef
+                    { tyCon =
+                        TyMapping
+                          ElmMapping
+                            { typeName = "LookMaNoPhantomParam"
+                            , moduleName = Just "Codegen.SampleTypes"
+                            , encoderLocation =
+                                Just
+                                  SymbolLocation
+                                    { symbolName = "encodeNatPhantomParameter"
+                                    , symbolModuleName = "Codegen.SampleTypes"
+                                    }
+                            , decoderLocation =
+                                Just
+                                  SymbolLocation
+                                    { symbolName = "decodeNatPhantomParameter"
+                                    , symbolModuleName = "Codegen.SampleTypes"
+                                    }
+                            , args = []
+                            , isTypeAlias = False
+                            , urlPiece = Nothing
+                            , queryParam = Nothing
+                            }
+                    , tyArgs = [ TyRef { tyCon = TyVar "a0" , tyArgs = [] } ]
+                    }
+                )
+              , ( Just "field97"
+                , TyRef
+                    { tyCon =
+                        TyMapping
+                          ElmMapping
+                            { typeName = "LookMaNoPhantomParam"
+                            , moduleName = Just "Codegen.SampleTypes"
+                            , encoderLocation =
+                                Just
+                                  SymbolLocation
+                                    { symbolName = "encodeNatPhantomParameter"
+                                    , symbolModuleName = "Codegen.SampleTypes"
+                                    }
+                            , decoderLocation =
+                                Just
+                                  SymbolLocation
+                                    { symbolName = "decodeNatPhantomParameter"
+                                    , symbolModuleName = "Codegen.SampleTypes"
+                                    }
+                            , args = []
+                            , isTypeAlias = False
+                            , urlPiece = Nothing
+                            , queryParam = Nothing
+                            }
+                    , tyArgs = [ TyRef { tyCon = TyVar "a0" , tyArgs = [] } ]
+                    }
+                )
+              , ( Just "field98"
+                , TyRef
+                    { tyCon =
+                        TyMapping
+                          ElmMapping
+                            { typeName = "LookMaNoPhantomParam"
+                            , moduleName = Just "Codegen.SampleTypes"
+                            , encoderLocation =
+                                Just
+                                  SymbolLocation
+                                    { symbolName = "encodeNatPhantomParameter"
+                                    , symbolModuleName = "Codegen.SampleTypes"
+                                    }
+                            , decoderLocation =
+                                Just
+                                  SymbolLocation
+                                    { symbolName = "decodeNatPhantomParameter"
+                                    , symbolModuleName = "Codegen.SampleTypes"
+                                    }
+                            , args = []
+                            , isTypeAlias = False
+                            , urlPiece = Nothing
+                            , queryParam = Nothing
+                            }
+                    , tyArgs = [ TyRef { tyCon = TyVar "a0" , tyArgs = [] } ]
+                    }
+                )
+              , ( Just "field99"
+                , TyRef
+                    { tyCon =
+                        TyMapping
+                          ElmMapping
+                            { typeName = "LookMaNoPhantomParam"
+                            , moduleName = Just "Codegen.SampleTypes"
+                            , encoderLocation =
+                                Just
+                                  SymbolLocation
+                                    { symbolName = "encodeNatPhantomParameter"
+                                    , symbolModuleName = "Codegen.SampleTypes"
+                                    }
+                            , decoderLocation =
+                                Just
+                                  SymbolLocation
+                                    { symbolName = "decodeNatPhantomParameter"
+                                    , symbolModuleName = "Codegen.SampleTypes"
+                                    }
+                            , args = []
+                            , isTypeAlias = False
+                            , urlPiece = Nothing
+                            , queryParam = Nothing
+                            }
+                    , tyArgs = [ TyRef { tyCon = TyVar "a0" , tyArgs = [] } ]
+                    }
+                )
+              ]
+          }
+      ]
+  }
diff --git a/test-output/extraction/golden/MonomorphicRecursiveType.txt b/test-output/extraction/golden/MonomorphicRecursiveType.txt
new file mode 100644
--- /dev/null
+++ b/test-output/extraction/golden/MonomorphicRecursiveType.txt
@@ -0,0 +1,83 @@
+DatatypeStructure
+  { mapping =
+      ElmMapping
+        { typeName = "MonomorphicRecursiveType"
+        , moduleName = Just "Codegen.SampleTypes"
+        , encoderLocation =
+            Just
+              SymbolLocation
+                { symbolName = "encodeMonomorphicRecursiveType"
+                , symbolModuleName = "Codegen.SampleTypes"
+                }
+        , decoderLocation =
+            Just
+              SymbolLocation
+                { symbolName = "decodeMonomorphicRecursiveType"
+                , symbolModuleName = "Codegen.SampleTypes"
+                }
+        , args = []
+        , isTypeAlias = False
+        , urlPiece = Nothing
+        , queryParam = Nothing
+        }
+  , nParams = 0
+  , constructors =
+      [ Constructor
+          { constructorName = "SMRTNil" , constructorFields = [] }
+      , Constructor
+          { constructorName = "SMRTCons"
+          , constructorFields =
+              [ ( Nothing
+                , TyRef
+                    { tyCon =
+                        TyMapping
+                          ElmMapping
+                            { typeName = "Int"
+                            , moduleName = Nothing
+                            , encoderLocation =
+                                Just
+                                  SymbolLocation
+                                    { symbolName = "int" , symbolModuleName = "Json.Encode" }
+                            , decoderLocation =
+                                Just
+                                  SymbolLocation
+                                    { symbolName = "int" , symbolModuleName = "Json.Decode" }
+                            , args = []
+                            , isTypeAlias = False
+                            , urlPiece = Nothing
+                            , queryParam = Nothing
+                            }
+                    , tyArgs = []
+                    }
+                )
+              , ( Nothing
+                , TyRef
+                    { tyCon =
+                        TyMapping
+                          ElmMapping
+                            { typeName = "MonomorphicRecursiveType"
+                            , moduleName = Just "Codegen.SampleTypes"
+                            , encoderLocation =
+                                Just
+                                  SymbolLocation
+                                    { symbolName = "encodeMonomorphicRecursiveType"
+                                    , symbolModuleName = "Codegen.SampleTypes"
+                                    }
+                            , decoderLocation =
+                                Just
+                                  SymbolLocation
+                                    { symbolName = "decodeMonomorphicRecursiveType"
+                                    , symbolModuleName = "Codegen.SampleTypes"
+                                    }
+                            , args = []
+                            , isTypeAlias = False
+                            , urlPiece = Nothing
+                            , queryParam = Nothing
+                            }
+                    , tyArgs = []
+                    }
+                )
+              ]
+          }
+      ]
+  }
diff --git a/test-output/extraction/golden/NatPhantomparameter_3.txt b/test-output/extraction/golden/NatPhantomparameter_3.txt
new file mode 100644
--- /dev/null
+++ b/test-output/extraction/golden/NatPhantomparameter_3.txt
@@ -0,0 +1,54 @@
+DatatypeStructure
+  { mapping =
+      ElmMapping
+        { typeName = "LookMaNoPhantomParam"
+        , moduleName = Just "Codegen.SampleTypes"
+        , encoderLocation =
+            Just
+              SymbolLocation
+                { symbolName = "encodeNatPhantomParameter"
+                , symbolModuleName = "Codegen.SampleTypes"
+                }
+        , decoderLocation =
+            Just
+              SymbolLocation
+                { symbolName = "decodeNatPhantomParameter"
+                , symbolModuleName = "Codegen.SampleTypes"
+                }
+        , args = []
+        , isTypeAlias = False
+        , urlPiece = Nothing
+        , queryParam = Nothing
+        }
+  , nParams = 1
+  , constructors =
+      [ Constructor
+          { constructorName = "NatPhantomParameter"
+          , constructorFields =
+              [ ( Nothing
+                , TyRef
+                    { tyCon =
+                        TyMapping
+                          ElmMapping
+                            { typeName = "List"
+                            , moduleName = Nothing
+                            , encoderLocation =
+                                Just
+                                  SymbolLocation
+                                    { symbolName = "list" , symbolModuleName = "Json.Encode" }
+                            , decoderLocation =
+                                Just
+                                  SymbolLocation
+                                    { symbolName = "list" , symbolModuleName = "Json.Decode" }
+                            , args = []
+                            , isTypeAlias = False
+                            , urlPiece = Nothing
+                            , queryParam = Nothing
+                            }
+                    , tyArgs = [ TyRef { tyCon = TyVar "a0" , tyArgs = [] } ]
+                    }
+                )
+              ]
+          }
+      ]
+  }
diff --git a/test-output/extraction/golden/PolymorphicRecursiveType.txt b/test-output/extraction/golden/PolymorphicRecursiveType.txt
new file mode 100644
--- /dev/null
+++ b/test-output/extraction/golden/PolymorphicRecursiveType.txt
@@ -0,0 +1,61 @@
+DatatypeStructure
+  { mapping =
+      ElmMapping
+        { typeName = "PolymorphicRecursiveType"
+        , moduleName = Just "Codegen.SampleTypes"
+        , encoderLocation =
+            Just
+              SymbolLocation
+                { symbolName = "encodePolymorphicRecursiveType"
+                , symbolModuleName = "Codegen.SampleTypes"
+                }
+        , decoderLocation =
+            Just
+              SymbolLocation
+                { symbolName = "decodePolymorphicRecursiveType"
+                , symbolModuleName = "Codegen.SampleTypes"
+                }
+        , args = []
+        , isTypeAlias = False
+        , urlPiece = Nothing
+        , queryParam = Nothing
+        }
+  , nParams = 1
+  , constructors =
+      [ Constructor
+          { constructorName = "SPRTNil" , constructorFields = [] }
+      , Constructor
+          { constructorName = "SPRTCons"
+          , constructorFields =
+              [ ( Nothing , TyRef { tyCon = TyVar "a0" , tyArgs = [] } )
+              , ( Nothing
+                , TyRef
+                    { tyCon =
+                        TyMapping
+                          ElmMapping
+                            { typeName = "PolymorphicRecursiveType"
+                            , moduleName = Just "Codegen.SampleTypes"
+                            , encoderLocation =
+                                Just
+                                  SymbolLocation
+                                    { symbolName = "encodePolymorphicRecursiveType"
+                                    , symbolModuleName = "Codegen.SampleTypes"
+                                    }
+                            , decoderLocation =
+                                Just
+                                  SymbolLocation
+                                    { symbolName = "decodePolymorphicRecursiveType"
+                                    , symbolModuleName = "Codegen.SampleTypes"
+                                    }
+                            , args = []
+                            , isTypeAlias = False
+                            , urlPiece = Nothing
+                            , queryParam = Nothing
+                            }
+                    , tyArgs = [ TyRef { tyCon = TyVar "a0" , tyArgs = [] } ]
+                    }
+                )
+              ]
+          }
+      ]
+  }
diff --git a/test-output/extraction/golden/RecordWithMultipleConstructors.txt b/test-output/extraction/golden/RecordWithMultipleConstructors.txt
new file mode 100644
--- /dev/null
+++ b/test-output/extraction/golden/RecordWithMultipleConstructors.txt
@@ -0,0 +1,110 @@
+DatatypeStructure
+  { mapping =
+      ElmMapping
+        { typeName = "RecordWithMultipleConstructors"
+        , moduleName = Just "Codegen.SampleTypes"
+        , encoderLocation =
+            Just
+              SymbolLocation
+                { symbolName = "encodeRecordWithMultipleConstructors"
+                , symbolModuleName = "Codegen.SampleTypes"
+                }
+        , decoderLocation =
+            Just
+              SymbolLocation
+                { symbolName = "decodeRecordWithMultipleConstructors"
+                , symbolModuleName = "Codegen.SampleTypes"
+                }
+        , args = []
+        , isTypeAlias = False
+        , urlPiece = Nothing
+        , queryParam = Nothing
+        }
+  , nParams = 0
+  , constructors =
+      [ Constructor
+          { constructorName = "FirstRecordConstructor"
+          , constructorFields =
+              [ ( Just "foo"
+                , TyRef
+                    { tyCon =
+                        TyMapping
+                          ElmMapping
+                            { typeName = "Bool"
+                            , moduleName = Nothing
+                            , encoderLocation =
+                                Just
+                                  SymbolLocation
+                                    { symbolName = "bool" , symbolModuleName = "Json.Encode" }
+                            , decoderLocation =
+                                Just
+                                  SymbolLocation
+                                    { symbolName = "bool" , symbolModuleName = "Json.Decode" }
+                            , args = []
+                            , isTypeAlias = False
+                            , urlPiece = Nothing
+                            , queryParam = Nothing
+                            }
+                    , tyArgs = []
+                    }
+                )
+              ]
+          }
+      , Constructor
+          { constructorName = "SecondRecordConstructor"
+          , constructorFields =
+              [ ( Just "bar"
+                , TyRef
+                    { tyCon =
+                        TyMapping
+                          ElmMapping
+                            { typeName = "Maybe"
+                            , moduleName = Just "Maybe"
+                            , encoderLocation =
+                                Just
+                                  SymbolLocation
+                                    { symbolName = "maybe"
+                                    , symbolModuleName = "Json.Encode.Extra"
+                                    }
+                            , decoderLocation =
+                                Just
+                                  SymbolLocation
+                                    { symbolName = "nullable" , symbolModuleName = "Json.Decode" }
+                            , args = []
+                            , isTypeAlias = False
+                            , urlPiece = Nothing
+                            , queryParam = Nothing
+                            }
+                    , tyArgs =
+                        [ TyRef
+                            { tyCon =
+                                TyMapping
+                                  ElmMapping
+                                    { typeName = "Int"
+                                    , moduleName = Nothing
+                                    , encoderLocation =
+                                        Just
+                                          SymbolLocation
+                                            { symbolName = "int"
+                                            , symbolModuleName = "Json.Encode"
+                                            }
+                                    , decoderLocation =
+                                        Just
+                                          SymbolLocation
+                                            { symbolName = "int"
+                                            , symbolModuleName = "Json.Decode"
+                                            }
+                                    , args = []
+                                    , isTypeAlias = False
+                                    , urlPiece = Nothing
+                                    , queryParam = Nothing
+                                    }
+                            , tyArgs = []
+                            }
+                        ]
+                    }
+                )
+              ]
+          }
+      ]
+  }
diff --git a/test-output/extraction/golden/SimpleHKT_Maybe.txt b/test-output/extraction/golden/SimpleHKT_Maybe.txt
new file mode 100644
--- /dev/null
+++ b/test-output/extraction/golden/SimpleHKT_Maybe.txt
@@ -0,0 +1,82 @@
+DatatypeStructure
+  { mapping =
+      ElmMapping
+        { typeName = "SimpleHKTMaybe"
+        , moduleName = Just "Codegen.SampleTypes"
+        , encoderLocation =
+            Just
+              SymbolLocation
+                { symbolName = "encodeSimpleHKT"
+                , symbolModuleName = "Codegen.SampleTypes"
+                }
+        , decoderLocation =
+            Just
+              SymbolLocation
+                { symbolName = "decodeSimpleHKT"
+                , symbolModuleName = "Codegen.SampleTypes"
+                }
+        , args = []
+        , isTypeAlias = False
+        , urlPiece = Nothing
+        , queryParam = Nothing
+        }
+  , nParams = 0
+  , constructors =
+      [ Constructor
+          { constructorName = "SimpleHKT"
+          , constructorFields =
+              [ ( Nothing
+                , TyRef
+                    { tyCon =
+                        TyMapping
+                          ElmMapping
+                            { typeName = "Maybe"
+                            , moduleName = Just "Maybe"
+                            , encoderLocation =
+                                Just
+                                  SymbolLocation
+                                    { symbolName = "maybe"
+                                    , symbolModuleName = "Json.Encode.Extra"
+                                    }
+                            , decoderLocation =
+                                Just
+                                  SymbolLocation
+                                    { symbolName = "nullable" , symbolModuleName = "Json.Decode" }
+                            , args = []
+                            , isTypeAlias = False
+                            , urlPiece = Nothing
+                            , queryParam = Nothing
+                            }
+                    , tyArgs =
+                        [ TyRef
+                            { tyCon =
+                                TyMapping
+                                  ElmMapping
+                                    { typeName = "String"
+                                    , moduleName = Nothing
+                                    , encoderLocation =
+                                        Just
+                                          SymbolLocation
+                                            { symbolName = "string"
+                                            , symbolModuleName = "Json.Encode"
+                                            }
+                                    , decoderLocation =
+                                        Just
+                                          SymbolLocation
+                                            { symbolName = "string"
+                                            , symbolModuleName = "Json.Decode"
+                                            }
+                                    , args = []
+                                    , isTypeAlias = False
+                                    , urlPiece = Nothing
+                                    , queryParam = Nothing
+                                    }
+                            , tyArgs = []
+                            }
+                        ]
+                    }
+                )
+              ]
+          }
+      ]
+  }
diff --git a/test-output/extraction/golden/SimpleRecord.txt b/test-output/extraction/golden/SimpleRecord.txt
new file mode 100644
--- /dev/null
+++ b/test-output/extraction/golden/SimpleRecord.txt
@@ -0,0 +1,111 @@
+DatatypeStructure
+  { mapping =
+      ElmMapping
+        { typeName = "SimpleRecord"
+        , moduleName = Just "Codegen.SampleTypes"
+        , encoderLocation =
+            Just
+              SymbolLocation
+                { symbolName = "encodeSimpleRecord"
+                , symbolModuleName = "Codegen.SampleTypes"
+                }
+        , decoderLocation =
+            Just
+              SymbolLocation
+                { symbolName = "decodeSimpleRecord"
+                , symbolModuleName = "Codegen.SampleTypes"
+                }
+        , args = []
+        , isTypeAlias = False
+        , urlPiece = Nothing
+        , queryParam = Nothing
+        }
+  , nParams = 0
+  , constructors =
+      [ Constructor
+          { constructorName = "SimpleRecord"
+          , constructorFields =
+              [ ( Just "name"
+                , TyRef
+                    { tyCon =
+                        TyMapping
+                          ElmMapping
+                            { typeName = "PolymorphicRecursiveType"
+                            , moduleName = Just "Codegen.SampleTypes"
+                            , encoderLocation =
+                                Just
+                                  SymbolLocation
+                                    { symbolName = "encodePolymorphicRecursiveType"
+                                    , symbolModuleName = "Codegen.SampleTypes"
+                                    }
+                            , decoderLocation =
+                                Just
+                                  SymbolLocation
+                                    { symbolName = "decodePolymorphicRecursiveType"
+                                    , symbolModuleName = "Codegen.SampleTypes"
+                                    }
+                            , args = []
+                            , isTypeAlias = False
+                            , urlPiece = Nothing
+                            , queryParam = Nothing
+                            }
+                    , tyArgs =
+                        [ TyRef
+                            { tyCon =
+                                TyMapping
+                                  ElmMapping
+                                    { typeName = "SimpleType"
+                                    , moduleName = Just "Codegen.SampleTypes"
+                                    , encoderLocation =
+                                        Just
+                                          SymbolLocation
+                                            { symbolName = "encodeSimpleType"
+                                            , symbolModuleName = "Codegen.SampleTypes"
+                                            }
+                                    , decoderLocation =
+                                        Just
+                                          SymbolLocation
+                                            { symbolName = "decodeSimpleType"
+                                            , symbolModuleName = "Codegen.SampleTypes"
+                                            }
+                                    , args = []
+                                    , isTypeAlias = False
+                                    , urlPiece = Nothing
+                                    , queryParam = Nothing
+                                    }
+                            , tyArgs = []
+                            }
+                        ]
+                    }
+                )
+              , ( Just "age"
+                , TyRef
+                    { tyCon =
+                        TyMapping
+                          ElmMapping
+                            { typeName = "SimpleType"
+                            , moduleName = Just "Codegen.SampleTypes"
+                            , encoderLocation =
+                                Just
+                                  SymbolLocation
+                                    { symbolName = "encodeSimpleType"
+                                    , symbolModuleName = "Codegen.SampleTypes"
+                                    }
+                            , decoderLocation =
+                                Just
+                                  SymbolLocation
+                                    { symbolName = "decodeSimpleType"
+                                    , symbolModuleName = "Codegen.SampleTypes"
+                                    }
+                            , args = []
+                            , isTypeAlias = False
+                            , urlPiece = Nothing
+                            , queryParam = Nothing
+                            }
+                    , tyArgs = []
+                    }
+                )
+              ]
+          }
+      ]
+  }
diff --git a/test-output/extraction/golden/SimpleRecordAlias.txt b/test-output/extraction/golden/SimpleRecordAlias.txt
new file mode 100644
--- /dev/null
+++ b/test-output/extraction/golden/SimpleRecordAlias.txt
@@ -0,0 +1,111 @@
+DatatypeStructure
+  { mapping =
+      ElmMapping
+        { typeName = "SimpleRecordAlias"
+        , moduleName = Just "Codegen.SampleTypes"
+        , encoderLocation =
+            Just
+              SymbolLocation
+                { symbolName = "encodeSimpleRecordAlias"
+                , symbolModuleName = "Codegen.SampleTypes"
+                }
+        , decoderLocation =
+            Just
+              SymbolLocation
+                { symbolName = "decodeSimpleRecordAlias"
+                , symbolModuleName = "Codegen.SampleTypes"
+                }
+        , args = []
+        , isTypeAlias = True
+        , urlPiece = Nothing
+        , queryParam = Nothing
+        }
+  , nParams = 0
+  , constructors =
+      [ Constructor
+          { constructorName = "SimpleRecordAlias"
+          , constructorFields =
+              [ ( Just "name"
+                , TyRef
+                    { tyCon =
+                        TyMapping
+                          ElmMapping
+                            { typeName = "PolymorphicRecursiveType"
+                            , moduleName = Just "Codegen.SampleTypes"
+                            , encoderLocation =
+                                Just
+                                  SymbolLocation
+                                    { symbolName = "encodePolymorphicRecursiveType"
+                                    , symbolModuleName = "Codegen.SampleTypes"
+                                    }
+                            , decoderLocation =
+                                Just
+                                  SymbolLocation
+                                    { symbolName = "decodePolymorphicRecursiveType"
+                                    , symbolModuleName = "Codegen.SampleTypes"
+                                    }
+                            , args = []
+                            , isTypeAlias = False
+                            , urlPiece = Nothing
+                            , queryParam = Nothing
+                            }
+                    , tyArgs =
+                        [ TyRef
+                            { tyCon =
+                                TyMapping
+                                  ElmMapping
+                                    { typeName = "SimpleType"
+                                    , moduleName = Just "Codegen.SampleTypes"
+                                    , encoderLocation =
+                                        Just
+                                          SymbolLocation
+                                            { symbolName = "encodeSimpleType"
+                                            , symbolModuleName = "Codegen.SampleTypes"
+                                            }
+                                    , decoderLocation =
+                                        Just
+                                          SymbolLocation
+                                            { symbolName = "decodeSimpleType"
+                                            , symbolModuleName = "Codegen.SampleTypes"
+                                            }
+                                    , args = []
+                                    , isTypeAlias = False
+                                    , urlPiece = Nothing
+                                    , queryParam = Nothing
+                                    }
+                            , tyArgs = []
+                            }
+                        ]
+                    }
+                )
+              , ( Just "age"
+                , TyRef
+                    { tyCon =
+                        TyMapping
+                          ElmMapping
+                            { typeName = "SimpleType"
+                            , moduleName = Just "Codegen.SampleTypes"
+                            , encoderLocation =
+                                Just
+                                  SymbolLocation
+                                    { symbolName = "encodeSimpleType"
+                                    , symbolModuleName = "Codegen.SampleTypes"
+                                    }
+                            , decoderLocation =
+                                Just
+                                  SymbolLocation
+                                    { symbolName = "decodeSimpleType"
+                                    , symbolModuleName = "Codegen.SampleTypes"
+                                    }
+                            , args = []
+                            , isTypeAlias = False
+                            , urlPiece = Nothing
+                            , queryParam = Nothing
+                            }
+                    , tyArgs = []
+                    }
+                )
+              ]
+          }
+      ]
+  }
diff --git a/test-output/extraction/golden/SimpleType.txt b/test-output/extraction/golden/SimpleType.txt
new file mode 100644
--- /dev/null
+++ b/test-output/extraction/golden/SimpleType.txt
@@ -0,0 +1,54 @@
+DatatypeStructure
+  { mapping =
+      ElmMapping
+        { typeName = "SimpleType"
+        , moduleName = Just "Codegen.SampleTypes"
+        , encoderLocation =
+            Just
+              SymbolLocation
+                { symbolName = "encodeSimpleType"
+                , symbolModuleName = "Codegen.SampleTypes"
+                }
+        , decoderLocation =
+            Just
+              SymbolLocation
+                { symbolName = "decodeSimpleType"
+                , symbolModuleName = "Codegen.SampleTypes"
+                }
+        , args = []
+        , isTypeAlias = False
+        , urlPiece = Nothing
+        , queryParam = Nothing
+        }
+  , nParams = 0
+  , constructors =
+      [ Constructor
+          { constructorName = "SimpleType"
+          , constructorFields =
+              [ ( Nothing
+                , TyRef
+                    { tyCon =
+                        TyMapping
+                          ElmMapping
+                            { typeName = "Int"
+                            , moduleName = Nothing
+                            , encoderLocation =
+                                Just
+                                  SymbolLocation
+                                    { symbolName = "int" , symbolModuleName = "Json.Encode" }
+                            , decoderLocation =
+                                Just
+                                  SymbolLocation
+                                    { symbolName = "int" , symbolModuleName = "Json.Decode" }
+                            , args = []
+                            , isTypeAlias = False
+                            , urlPiece = Nothing
+                            , queryParam = Nothing
+                            }
+                    , tyArgs = []
+                    }
+                )
+              ]
+          }
+      ]
+  }
