ParseOk
  ( Module
      SrcSpanInfo
        { srcInfoSpan = SrcSpan "tests/examples/GenericTree.hs" 1 1 8 1
        , srcInfoPoints =
            [ SrcSpan "tests/examples/GenericTree.hs" 1 1 1 1
            , SrcSpan "tests/examples/GenericTree.hs" 2 1 2 1
            , SrcSpan "tests/examples/GenericTree.hs" 2 1 2 1
            , SrcSpan "tests/examples/GenericTree.hs" 4 1 4 1
            , SrcSpan "tests/examples/GenericTree.hs" 6 1 6 1
            , SrcSpan "tests/examples/GenericTree.hs" 7 1 7 1
            , SrcSpan "tests/examples/GenericTree.hs" 8 1 8 1
            , SrcSpan "tests/examples/GenericTree.hs" 8 1 8 1
            ]
        }
      (Just
         (ModuleHead
            SrcSpanInfo
              { srcInfoSpan = SrcSpan "tests/examples/GenericTree.hs" 2 1 2 25
              , srcInfoPoints =
                  [ SrcSpan "tests/examples/GenericTree.hs" 2 1 2 7
                  , SrcSpan "tests/examples/GenericTree.hs" 2 20 2 25
                  ]
              }
            (ModuleName
               SrcSpanInfo
                 { srcInfoSpan = SrcSpan "tests/examples/GenericTree.hs" 2 8 2 19
                 , srcInfoPoints = []
                 }
               "GenericTree")
            Nothing
            Nothing))
      [ LanguagePragma
          SrcSpanInfo
            { srcInfoSpan = SrcSpan "tests/examples/GenericTree.hs" 1 1 1 28
            , srcInfoPoints =
                [ SrcSpan "tests/examples/GenericTree.hs" 1 1 1 13
                , SrcSpan "tests/examples/GenericTree.hs" 1 25 1 28
                ]
            }
          [ Ident
              SrcSpanInfo
                { srcInfoSpan = SrcSpan "tests/examples/GenericTree.hs" 1 14 1 24
                , srcInfoPoints = []
                }
              "RankNTypes"
          ]
      ]
      [ ImportDecl
          { importAnn =
              SrcSpanInfo
                { srcInfoSpan = SrcSpan "tests/examples/GenericTree.hs" 4 1 4 21
                , srcInfoPoints =
                    [ SrcSpan "tests/examples/GenericTree.hs" 4 1 4 7 ]
                }
          , importModule =
              ModuleName
                SrcSpanInfo
                  { srcInfoSpan = SrcSpan "tests/examples/GenericTree.hs" 4 8 4 21
                  , srcInfoPoints = []
                  }
                "Data.Typeable"
          , importQualified = False
          , importSrc = False
          , importSafe = False
          , importPkg = Nothing
          , importAs = Nothing
          , importSpecs = Nothing
          }
      ]
      [ TypeSig
          SrcSpanInfo
            { srcInfoSpan = SrcSpan "tests/examples/GenericTree.hs" 6 1 6 83
            , srcInfoPoints =
                [ SrcSpan "tests/examples/GenericTree.hs" 6 8 6 10 ]
            }
          [ Ident
              SrcSpanInfo
                { srcInfoSpan = SrcSpan "tests/examples/GenericTree.hs" 6 1 6 7
                , srcInfoPoints = []
                }
              "dynRep"
          ]
          (TyForall
             SrcSpanInfo
               { srcInfoSpan = SrcSpan "tests/examples/GenericTree.hs" 6 11 6 83
               , srcInfoPoints = []
               }
             Nothing
             (Just
                (CxSingle
                   SrcSpanInfo
                     { srcInfoSpan = SrcSpan "tests/examples/GenericTree.hs" 6 11 6 26
                     , srcInfoPoints =
                         [ SrcSpan "tests/examples/GenericTree.hs" 6 11 6 12
                         , SrcSpan "tests/examples/GenericTree.hs" 6 22 6 23
                         , SrcSpan "tests/examples/GenericTree.hs" 6 24 6 26
                         ]
                     }
                   (ParenA
                      SrcSpanInfo
                        { srcInfoSpan = SrcSpan "tests/examples/GenericTree.hs" 6 11 6 26
                        , srcInfoPoints =
                            [ SrcSpan "tests/examples/GenericTree.hs" 6 11 6 12
                            , SrcSpan "tests/examples/GenericTree.hs" 6 22 6 23
                            , SrcSpan "tests/examples/GenericTree.hs" 6 24 6 26
                            ]
                        }
                      (ClassA
                         SrcSpanInfo
                           { srcInfoSpan = SrcSpan "tests/examples/GenericTree.hs" 6 12 6 22
                           , srcInfoPoints = []
                           }
                         (UnQual
                            SrcSpanInfo
                              { srcInfoSpan = SrcSpan "tests/examples/GenericTree.hs" 6 12 6 20
                              , srcInfoPoints = []
                              }
                            (Ident
                               SrcSpanInfo
                                 { srcInfoSpan = SrcSpan "tests/examples/GenericTree.hs" 6 12 6 20
                                 , srcInfoPoints = []
                                 }
                               "Typeable"))
                         [ TyVar
                             SrcSpanInfo
                               { srcInfoSpan = SrcSpan "tests/examples/GenericTree.hs" 6 21 6 22
                               , srcInfoPoints = []
                               }
                             (Ident
                                SrcSpanInfo
                                  { srcInfoSpan = SrcSpan "tests/examples/GenericTree.hs" 6 21 6 22
                                  , srcInfoPoints = []
                                  }
                                "a")
                         ]))))
             (TyFun
                SrcSpanInfo
                  { srcInfoSpan = SrcSpan "tests/examples/GenericTree.hs" 6 27 6 83
                  , srcInfoPoints =
                      [ SrcSpan "tests/examples/GenericTree.hs" 6 29 6 31 ]
                  }
                (TyVar
                   SrcSpanInfo
                     { srcInfoSpan = SrcSpan "tests/examples/GenericTree.hs" 6 27 6 28
                     , srcInfoPoints = []
                     }
                   (Ident
                      SrcSpanInfo
                        { srcInfoSpan = SrcSpan "tests/examples/GenericTree.hs" 6 27 6 28
                        , srcInfoPoints = []
                        }
                      "a"))
                (TyTuple
                   SrcSpanInfo
                     { srcInfoSpan = SrcSpan "tests/examples/GenericTree.hs" 6 32 6 83
                     , srcInfoPoints =
                         [ SrcSpan "tests/examples/GenericTree.hs" 6 32 6 33
                         , SrcSpan "tests/examples/GenericTree.hs" 6 40 6 41
                         , SrcSpan "tests/examples/GenericTree.hs" 6 82 6 83
                         ]
                     }
                   Boxed
                   [ TyCon
                       SrcSpanInfo
                         { srcInfoSpan = SrcSpan "tests/examples/GenericTree.hs" 6 33 6 40
                         , srcInfoPoints = []
                         }
                       (UnQual
                          SrcSpanInfo
                            { srcInfoSpan = SrcSpan "tests/examples/GenericTree.hs" 6 33 6 40
                            , srcInfoPoints = []
                            }
                          (Ident
                             SrcSpanInfo
                               { srcInfoSpan = SrcSpan "tests/examples/GenericTree.hs" 6 33 6 40
                               , srcInfoPoints = []
                               }
                             "TypeRep"))
                   , TyForall
                       SrcSpanInfo
                         { srcInfoSpan = SrcSpan "tests/examples/GenericTree.hs" 6 42 6 82
                         , srcInfoPoints =
                             [ SrcSpan "tests/examples/GenericTree.hs" 6 42 6 48
                             , SrcSpan "tests/examples/GenericTree.hs" 6 50 6 51
                             ]
                         }
                       (Just
                          [ UnkindedVar
                              SrcSpanInfo
                                { srcInfoSpan = SrcSpan "tests/examples/GenericTree.hs" 6 49 6 50
                                , srcInfoPoints = []
                                }
                              (Ident
                                 SrcSpanInfo
                                   { srcInfoSpan = SrcSpan "tests/examples/GenericTree.hs" 6 49 6 50
                                   , srcInfoPoints = []
                                   }
                                 "b")
                          ])
                       (Just
                          (CxSingle
                             SrcSpanInfo
                               { srcInfoSpan = SrcSpan "tests/examples/GenericTree.hs" 6 52 6 67
                               , srcInfoPoints =
                                   [ SrcSpan "tests/examples/GenericTree.hs" 6 52 6 53
                                   , SrcSpan "tests/examples/GenericTree.hs" 6 63 6 64
                                   , SrcSpan "tests/examples/GenericTree.hs" 6 65 6 67
                                   ]
                               }
                             (ParenA
                                SrcSpanInfo
                                  { srcInfoSpan = SrcSpan "tests/examples/GenericTree.hs" 6 52 6 67
                                  , srcInfoPoints =
                                      [ SrcSpan "tests/examples/GenericTree.hs" 6 52 6 53
                                      , SrcSpan "tests/examples/GenericTree.hs" 6 63 6 64
                                      , SrcSpan "tests/examples/GenericTree.hs" 6 65 6 67
                                      ]
                                  }
                                (ClassA
                                   SrcSpanInfo
                                     { srcInfoSpan =
                                         SrcSpan "tests/examples/GenericTree.hs" 6 53 6 63
                                     , srcInfoPoints = []
                                     }
                                   (UnQual
                                      SrcSpanInfo
                                        { srcInfoSpan =
                                            SrcSpan "tests/examples/GenericTree.hs" 6 53 6 61
                                        , srcInfoPoints = []
                                        }
                                      (Ident
                                         SrcSpanInfo
                                           { srcInfoSpan =
                                               SrcSpan "tests/examples/GenericTree.hs" 6 53 6 61
                                           , srcInfoPoints = []
                                           }
                                         "Typeable"))
                                   [ TyVar
                                       SrcSpanInfo
                                         { srcInfoSpan =
                                             SrcSpan "tests/examples/GenericTree.hs" 6 62 6 63
                                         , srcInfoPoints = []
                                         }
                                       (Ident
                                          SrcSpanInfo
                                            { srcInfoSpan =
                                                SrcSpan "tests/examples/GenericTree.hs" 6 62 6 63
                                            , srcInfoPoints = []
                                            }
                                          "b")
                                   ]))))
                       (TyFun
                          SrcSpanInfo
                            { srcInfoSpan = SrcSpan "tests/examples/GenericTree.hs" 6 68 6 82
                            , srcInfoPoints =
                                [ SrcSpan "tests/examples/GenericTree.hs" 6 70 6 72 ]
                            }
                          (TyVar
                             SrcSpanInfo
                               { srcInfoSpan = SrcSpan "tests/examples/GenericTree.hs" 6 68 6 69
                               , srcInfoPoints = []
                               }
                             (Ident
                                SrcSpanInfo
                                  { srcInfoSpan = SrcSpan "tests/examples/GenericTree.hs" 6 68 6 69
                                  , srcInfoPoints = []
                                  }
                                "b"))
                          (TyParen
                             SrcSpanInfo
                               { srcInfoSpan = SrcSpan "tests/examples/GenericTree.hs" 6 73 6 82
                               , srcInfoPoints =
                                   [ SrcSpan "tests/examples/GenericTree.hs" 6 73 6 74
                                   , SrcSpan "tests/examples/GenericTree.hs" 6 81 6 82
                                   ]
                               }
                             (TyApp
                                SrcSpanInfo
                                  { srcInfoSpan = SrcSpan "tests/examples/GenericTree.hs" 6 74 6 81
                                  , srcInfoPoints = []
                                  }
                                (TyCon
                                   SrcSpanInfo
                                     { srcInfoSpan =
                                         SrcSpan "tests/examples/GenericTree.hs" 6 74 6 79
                                     , srcInfoPoints = []
                                     }
                                   (UnQual
                                      SrcSpanInfo
                                        { srcInfoSpan =
                                            SrcSpan "tests/examples/GenericTree.hs" 6 74 6 79
                                        , srcInfoPoints = []
                                        }
                                      (Ident
                                         SrcSpanInfo
                                           { srcInfoSpan =
                                               SrcSpan "tests/examples/GenericTree.hs" 6 74 6 79
                                           , srcInfoPoints = []
                                           }
                                         "Maybe")))
                                (TyVar
                                   SrcSpanInfo
                                     { srcInfoSpan =
                                         SrcSpan "tests/examples/GenericTree.hs" 6 80 6 81
                                     , srcInfoPoints = []
                                     }
                                   (Ident
                                      SrcSpanInfo
                                        { srcInfoSpan =
                                            SrcSpan "tests/examples/GenericTree.hs" 6 80 6 81
                                        , srcInfoPoints = []
                                        }
                                      "b")))))
                   ])))
      , FunBind
          SrcSpanInfo
            { srcInfoSpan = SrcSpan "tests/examples/GenericTree.hs" 7 1 7 36
            , srcInfoPoints = []
            }
          [ Match
              SrcSpanInfo
                { srcInfoSpan = SrcSpan "tests/examples/GenericTree.hs" 7 1 7 36
                , srcInfoPoints = []
                }
              (Ident
                 SrcSpanInfo
                   { srcInfoSpan = SrcSpan "tests/examples/GenericTree.hs" 7 1 7 7
                   , srcInfoPoints = []
                   }
                 "dynRep")
              [ PVar
                  SrcSpanInfo
                    { srcInfoSpan = SrcSpan "tests/examples/GenericTree.hs" 7 8 7 9
                    , srcInfoPoints = []
                    }
                  (Ident
                     SrcSpanInfo
                       { srcInfoSpan = SrcSpan "tests/examples/GenericTree.hs" 7 8 7 9
                       , srcInfoPoints = []
                       }
                     "a")
              ]
              (UnGuardedRhs
                 SrcSpanInfo
                   { srcInfoSpan = SrcSpan "tests/examples/GenericTree.hs" 7 10 7 36
                   , srcInfoPoints =
                       [ SrcSpan "tests/examples/GenericTree.hs" 7 10 7 11 ]
                   }
                 (Tuple
                    SrcSpanInfo
                      { srcInfoSpan = SrcSpan "tests/examples/GenericTree.hs" 7 12 7 36
                      , srcInfoPoints =
                          [ SrcSpan "tests/examples/GenericTree.hs" 7 12 7 13
                          , SrcSpan "tests/examples/GenericTree.hs" 7 21 7 22
                          , SrcSpan "tests/examples/GenericTree.hs" 7 35 7 36
                          ]
                      }
                    Boxed
                    [ App
                        SrcSpanInfo
                          { srcInfoSpan = SrcSpan "tests/examples/GenericTree.hs" 7 13 7 21
                          , srcInfoPoints = []
                          }
                        (Var
                           SrcSpanInfo
                             { srcInfoSpan = SrcSpan "tests/examples/GenericTree.hs" 7 13 7 19
                             , srcInfoPoints = []
                             }
                           (UnQual
                              SrcSpanInfo
                                { srcInfoSpan = SrcSpan "tests/examples/GenericTree.hs" 7 13 7 19
                                , srcInfoPoints = []
                                }
                              (Ident
                                 SrcSpanInfo
                                   { srcInfoSpan = SrcSpan "tests/examples/GenericTree.hs" 7 13 7 19
                                   , srcInfoPoints = []
                                   }
                                 "typeOf")))
                        (Var
                           SrcSpanInfo
                             { srcInfoSpan = SrcSpan "tests/examples/GenericTree.hs" 7 20 7 21
                             , srcInfoPoints = []
                             }
                           (UnQual
                              SrcSpanInfo
                                { srcInfoSpan = SrcSpan "tests/examples/GenericTree.hs" 7 20 7 21
                                , srcInfoPoints = []
                                }
                              (Ident
                                 SrcSpanInfo
                                   { srcInfoSpan = SrcSpan "tests/examples/GenericTree.hs" 7 20 7 21
                                   , srcInfoPoints = []
                                   }
                                 "a")))
                    , Lambda
                        SrcSpanInfo
                          { srcInfoSpan = SrcSpan "tests/examples/GenericTree.hs" 7 23 7 35
                          , srcInfoPoints =
                              [ SrcSpan "tests/examples/GenericTree.hs" 7 23 7 24
                              , SrcSpan "tests/examples/GenericTree.hs" 7 26 7 28
                              ]
                          }
                        [ PWildCard
                            SrcSpanInfo
                              { srcInfoSpan = SrcSpan "tests/examples/GenericTree.hs" 7 24 7 25
                              , srcInfoPoints = []
                              }
                        ]
                        (App
                           SrcSpanInfo
                             { srcInfoSpan = SrcSpan "tests/examples/GenericTree.hs" 7 29 7 35
                             , srcInfoPoints = []
                             }
                           (Var
                              SrcSpanInfo
                                { srcInfoSpan = SrcSpan "tests/examples/GenericTree.hs" 7 29 7 33
                                , srcInfoPoints = []
                                }
                              (UnQual
                                 SrcSpanInfo
                                   { srcInfoSpan = SrcSpan "tests/examples/GenericTree.hs" 7 29 7 33
                                   , srcInfoPoints = []
                                   }
                                 (Ident
                                    SrcSpanInfo
                                      { srcInfoSpan =
                                          SrcSpan "tests/examples/GenericTree.hs" 7 29 7 33
                                      , srcInfoPoints = []
                                      }
                                    "cast")))
                           (Var
                              SrcSpanInfo
                                { srcInfoSpan = SrcSpan "tests/examples/GenericTree.hs" 7 34 7 35
                                , srcInfoPoints = []
                                }
                              (UnQual
                                 SrcSpanInfo
                                   { srcInfoSpan = SrcSpan "tests/examples/GenericTree.hs" 7 34 7 35
                                   , srcInfoPoints = []
                                   }
                                 (Ident
                                    SrcSpanInfo
                                      { srcInfoSpan =
                                          SrcSpan "tests/examples/GenericTree.hs" 7 34 7 35
                                      , srcInfoPoints = []
                                      }
                                    "a"))))
                    ]))
              Nothing
          ]
      ]
  , []
  )