@@ -190,13 +190,22 @@ deriveTypeScript options name = do
190
190
case (unwrapUnaryRecords options, datatypeCons) of
191
191
(True , [con]) | RecordConstructor [_name] <- constructorVariant con -> do
192
192
let [fld] = constructorFields con
193
- let getTypeFn = FunD 'getTypeScriptType [Clause [WildP ] (NormalB (AppE (VarE 'getTypeScriptType) (SigE (ConE 'Proxy) (AppT (ConT ''Proxy) fld)))) [] ]
194
- let getParentTypesFn = FunD 'getParentTypes [Clause [WildP ] (NormalB (ListE [AppE (ConE 'TSType) (SigE (ConE 'Proxy) (AppT (ConT ''Proxy) fld))])) [] ]
193
+ let getNonGenericTypeFn = FunD 'getTypeScriptType [Clause [WildP ] (NormalB (getTypeAsStringExp fld)) [] ]
194
+ let getGenericTypeFn = if null datatypeVars
195
+ then getNonGenericTypeFn
196
+ else FunD 'getTypeScriptType [Clause [WildP ] (NormalB (getTypeAsStringExp (foldl AppT (ConT name) templateVarsToUse))) [] ]
197
+ getGenericParentTypesFn <- getGenericParentTypesExpression fullyQualifiedDatatypeInfo >>= \ expr -> return $ FunD 'getParentTypes [Clause [WildP ] (NormalB expr) [] ]
198
+ getNonGenericParentTypesFn <- getNonGenericParentTypesExpression fullyQualifiedDatatypeInfo >>= \ expr -> return $ FunD 'getParentTypes [Clause [WildP ] (NormalB expr) [] ]
199
+ let fullyGenericInstance = mkInstance [] (AppT (ConT ''TypeScript) (ConT name)) [getGenericTypeFn, getGenericParentTypesFn]
200
+ otherInstances <- if null datatypeVars
201
+ then return []
202
+ else
195
203
#if MIN_VERSION_th_abstraction(0,3,0)
196
- return [mkInstance (fmap getDatatypePredicate datatypeInstTypes) (AppT (ConT ''TypeScript) (foldl AppT (ConT name) datatypeInstTypes)) [getTypeFn, getParentTypesFn ]]
204
+ return [mkInstance (fmap getDatatypePredicate datatypeInstTypes) (AppT (ConT ''TypeScript) (foldl AppT (ConT name) datatypeInstTypes)) [getNonGenericTypeFn, getNonGenericParentTypesFn ]]
197
205
#else
198
- return [mkInstance (fmap getDatatypePredicate datatypeVars) (AppT (ConT ''TypeScript) (foldl AppT (ConT name) datatypeVars)) [getTypeFn, getParentTypesFn ]]
206
+ return [mkInstance (fmap getDatatypePredicate datatypeVars) (AppT (ConT ''TypeScript) (foldl AppT (ConT name) datatypeVars)) [getNonGenericTypeFn, getNonGenericParentTypesFn ]]
199
207
#endif
208
+ return (fullyGenericInstance : otherInstances)
200
209
_ -> do
201
210
typeExpr <- getTypeExpression fullyQualifiedDatatypeInfo
202
211
let getTypeFn = FunD 'getTypeScriptType [Clause [WildP ] (NormalB typeExpr) [] ]
0 commit comments