Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

190
Visualizações
Coincidencia de patrones en JS en un tipo de suma de productos de PureScript

Tengo un tipo de suma de productos algebraica en PureScript:

 data IO = Menu (Word8 -> Effect IO) | LongMessage (Array String) (Effect IO) | ShortMessage String (Effect IO) | End initialize :: Effect IO

Me gustaría llamar a initialize desde JavaScript y luego consumir su resultado. Si ejecuto Main.initialize() desde JavaScript, obtengo un Object JS que se imprime de la siguiente manera en la consola:

 LongMessage3 {value0: Array(15), value1: ƒ} value0: (1) ['foo'] value1: ƒ __do() [[Prototype]]: Object

¿Cómo se vería el código JavaScript que reconoce este objeto como un valor correspondiente al constructor LongMessage ?

about 4 years ago · Juan Pablo Isaza
1 Respostas
Responde à pergunta

0

Primero, para responder preguntas como esta, puede mirar el código JS compilado usted mismo. Se encuentra en ./output/My.Module.Name/index.js . Solo ábrelo y echa un vistazo.

Pero para completar, aquí está la respuesta:

La versión actual de PureScript (0.15.2 a partir de este escrito) compila ADT en un conjunto de objetos JS con prototipos únicos.

Voy a usar un ejemplo más pequeño, porque el tuyo es demasiado grande para ser legible. Digamos que mi ADT se ve así:

 data X = Y Int | Z String Boolean a = Y 42 b = Z "foo" false

Esto produciría aproximadamente el siguiente JS (digo "aproximadamente" porque es un poco más elaborado, pero la esencia es la misma):

 function Y(value0) { this.value0 = value0 } function Z(value0, value1) { this.value0 = value0 this.value1 = value1 } var a = new Y(42) var b = new Z("foo", false)

Cuando se construye de esta manera, los valores del tipo se pueden probar para el constructor en particular al verificar el prototipo a través de instanceof . Así, por ejemplo, lo siguiente:

 c = case a of Y _ -> "It's a Y" Z s _ -> "It's a Z with " <> s

se traduciría aproximadamente a:

 var c = (() => { if (a instanceof Y) { return "It's a Y" } if (a instanceof Z) { return "It's a Z with " + a.value0 } throw new Error("Invalid pattern match") })()

Una nota al pie: en su ejemplo, el constructor parece llamarse LogMessage3 en lugar de LogMessage . Esto me dice que probablemente esté ejecutando un paquete. Durante la agrupación, las funciones pueden cambiar de nombre para evitar conflictos de nombres; de ahí proviene el "3".

about 4 years ago · Juan Pablo Isaza Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda