2017-07-06 3 views
0

Problème avec certains exemples du livre Learn Purescript by Example. Plus précisément ce code de la section 9.3:Que faire à propos de 'supprimer' dans la notation Purescript?

main :: Eff (canvas :: CANVAS) Unit 
main = void $ unsafePartial do 
    Just canvas <- getCanvasElementById "canvas" 
    ctx <- getContext2D canvas 

    setFillStyle "#0000FF" ctx -- this's line 16 referred to in the error message 

    fillPath ctx $ rect ctx 
    { x: 250.0 
    , y: 250.0 
    , w: 100.0 
    , h: 100.0 
    } 

donne l'erreur suivante:

in module Example.Rectangle at src\Example\Rectangle.purs line 16, column 3 - line 16, column 29

A result of type

Context2D

was implicitly discarded in a do notation block. You can use _ <- ... to explicitly discard the result.

while applying a function discard of type Discard t0 => Bind t1 => t1 t0 -> (t0 -> t1 t2) -> t1 t2 to argument (setFillStyle "#0000FF") ctx while inferring the type of discard ((setFillStyle "#0000FF") ctx) in value declaration main

where t0 is an unknown type t2 is an unknown type t1 is an unknown type

See https://github.com/purescript/documentation/blob/master/errors/NoInstanceFound.md for more information,

L'erreur proposée ne permet pas et je ne peux pas travailler ce « défausser » fait acctualy. J'ai également remarqué un problème similaire avec, par exemple, la fonction "simuler" de la section 8.17. Si j'essaie la suggestion d'assignation en utilisant "_ < -" plus d'erreurs apparaissant au hasard apparaissent.

(Ce utilise PCSI 0.11.5)

+0

S'il vous plaît, partagez votre code, pas de lien pour réserver. Cela ne fonctionne pas. – timiTao

Répondre

1

Il est plus permis de se défaire implicitement une valeur dans un bloc do.

Vous pouvez: - ignorer la valeur explicitement: _ < - setFillStyle .... - ou si la valeur de retour est l'unité (par exemple Eff FX Unit), vous pouvez simplement importer "jeter" de "Prélude"

+1

Alternativement, vous pouvez faire 'void $ setFilleStyle ...' où 'void' vient de prélude. – Albtzrly

+0

Merci, ces deux solutions fonctionnent, même si elles sont un peu verbeuses – bensnowball