[generics-rep] Trivial genericShow blows up the call stack

Offen
#245 7 Kommentare 6 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen

Dieses Issue hat noch niemand übernommen.

Bewertung

Schwierigkeit
4/5
Geschätzter Aufwand
3-5 Tage
Anfängerfreundlichkeit
25/100
Issue-Typ
Bug
Klarheit
Muss geklärt werden
Aktivitätsstatus
Veraltet
Bereich
backend

Rechercherichtung

Start by reading the genericShow and generic representation code referenced in the stack trace, then reproduce the failure with the VVis and Frame definitions in the issue. Trace why deriving Show for the nested generic types recurses until the stack overflows; done means identifying the cause and confirming a fix prevents the overflow for this example.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Beschreibung

type: documentation

I have the following code in my library:

data VVis a
  = Fill a (Frame a)
  | ...

derive instance genericVVis :: Generic (VVis a) _
instance showVVis :: Show a => Show (VVis a) where
  show = genericShow

data Frame a = Frame
  { frameMax :: a
  , frameMin :: a
  }

derive instance genericFrame :: Generic (Frame a) _
instance showFrame :: Show a => Show (Frame a) where
  show = genericShow

If I now load my code in a REPL and create the following trivial value:

> Fill 2.0 (Frame {frameMax: 1.0, frameMin: 0.0})
return new Data_Show.Show(Data_Generic_Rep_Show.genericShow(genericVVis)(Data_Generic_Rep_Show.genericShowSum(Data_Generic_Rep_Show.genericShowConstructor(Data_Generic_Rep_Show.genericShowArgsProduct(Data_Generic_Rep_Show.genericShowArgsArgument(dictShow))(Data_Generic_Rep_Show.genericShowArgsArgument(showFrame(dictShow))))(new Data_Symbol.IsSymbol(function () {
                                                                             ^

RangeError: Maximum call stack size exceeded
...

This is a very small value, so I don't understand why this is blowing up the call stack. Could somebody help me understand please?

Vorherrschende Sprache
PureScript
Sterne
168
Forks
90
Ø Merge
3 T. 1 Std.
Gemergte PRs (30 T.)
1

Entwicklungsumgebung

  • Kein Dockerfile und keine Docker-Compose-Datei
  • Hat eine Pull-Request-Vorlage
  • Kein Beitragsleitfaden

Erste Schritte

  1. Lesen Sie das ganze Issue und danach den Beitragsleitfaden des Projekts.
  2. Schreiben Sie ins Issue, dass Sie es übernehmen — das erspart doppelte Arbeit.
  3. Forken Sie das Repository und arbeiten Sie in einem Branch.
  4. Öffnen Sie einen Pull Request, der die Issue-Nummer nennt.

Mehr aus purescript/purescript-prelude

Alle Issues in purescript/purescript-prelude

Ähnliche Issues

Weitere Issues zu Backend & API Design

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.