{
  "$type": "site.standard.document",
  "bskyPostRef": {
    "cid": "bafyreid6q77feja3qjnokmyd2jbb2667hqtn5hfjpw22w3iyib2xihgd74",
    "uri": "at://did:plc:pi6woz4d47bkuws673w2il2r/app.bsky.feed.post/3mi62r66tff52"
  },
  "path": "/t/history-of-dh-dependent-types-in-haskell-contributions/11242?page=2#post_25",
  "publishedAt": "2026-03-29T02:01:15.000Z",
  "site": "https://discourse.haskell.org",
  "textContent": "Here’s a probably stupid idea I had for unification:\nHsTerm would contain some form of these fields.\n\n\n    HsVar/HsTyVar\n    HsOverLit, HsLit/HsTyLit\n    HsApp/HsAppTy\n    HsAppType/HsAppKindTy\n    OpApp/HsOpTy\n    HsPar/HsParTy\n    ExplicitTuple/HsExplicitTupleTy\n    ExplicitList/HsExplicitListTy\n    ExprWithTySig/HsKindSig\n    HsUntypedSplice/HsSpliceTy\n    HsHole/HsWildCardTy\n    HsForAll/HsForAllTy\n    HsQual/HsQualTy\n    HsFunArr/HsFunTy\n\n\nThere would also be a type family that would redirect the term specific things. E.g.\n\n\n    data HsTerm s p =\n        -- Constructors listed above\n        HsExprType !(XHsExprType s p) (ExprType s p)\n\n    data TermParam = Ty | Ex | Unknown -- like this to avoid name collisions in GHC, qualified imports would probably be used.\n\n    type family ExprType where\n        ExprType Ty = OtherHsType\n        ExprType Ex = OtherHsExpr\n        ExprType Unknown= DataCannotHappen\n    type HsExpr = HsTerm Ex\n    type HsType = HsTerm Ty\n\n\nWhere OtherHsType and OtherHsExpr contain fields not mentioned above. I mainly propose this, as I think that with PatternSynonyms, this needn’t even be a breaking change.",
  "title": "History of DH (Dependent Types in Haskell) contributions"
}