Aguarès utilise witches.town. Vous pouvez læ suivre et interagir si vous possédez un compte quelque part dans le "fediverse".

Bon alors... Mon premier contact avec Haskell, je dois vous dire... Je ne suis pas vraiment impressionné·e... :chat_jpg:

@wryk Mais je comprend rien à l'export/import de modules T_T

@wryk c'est ce que je suis en train de parcourir...

@Ambraven c'est un point particulier ou l'ensemble qui te pose un soucis ?

Je peux p-e te faire un exemple pour essayer de te débloquer

@wryk c'est une instance de Show qui me pose problème.

@Ambraven @wryk Qu'est-ce qui t'embête ? C'est une broutille, je voulais juste que ça montre les mots tels qu'on les aurait écrit en tant qu'humain et pas avec leur représentation de base en Haskell, on peut le laisser tout dériver si tu préfères.

Du coup ce qui t'embête c'est plus le concept de TypeClass et d'instance que de module non ? (les modules c'est les fichiers qui exportent des types et des valeurs)

@Sasha @wryk ce qui m'embête, c'est que j'arrive pas à faire fonctionner "show generate" dans Main.hs

( "main = generate" ne renvoie rien et "putStrLn generate" ne fonctionne pas parce que generate ne renvoie pas une string... )

C'est moi qui galère avec le langage, pas un problème fondamentale avec ton implémentation à priori.

@Ambraven @wryk Oui c'est un problème avec la monade IO. Ça peut dérouter au début, c'est normal, d'autant plus qu'être dans un toplevel donc un truc assez impératif dans l'idée n'aide pas vu que c'est fondamentalement une exception par rapport à un programme normal.

Alors déjà l'idée du toplevel ghci, c'est justement qu'il essaye de te montrer tout les résultats qu'il évalue donc si tu lui donnes à manger un truc instance de show, il va utiliser show automatiquement.

Ensuite, comme j'ai dit fondamentalement c'est impératif et c'est pour ça que tu peux écrire une expression de type IO a, et il va l'évaluer. Du coup t'as besoin de rien, juste «generate».

Aguarès @Ambraven

@Sasha @wryk

dans ghci oui, mais j'essaye de produire un exe. generate tout seul, il aime pas... -_-

@Ambraven @wryk Je pensais le faire, j'attendais de voir si c'était utile, comment tu voulais t'en servir, bref, ce qu'on faisait de ma toute petit ébauche de quelque chose.

En tout cas c'est bien tu vas comprendre direct les monades : dans mon message précédent, tu dois te dire «c'est dommage, ça marcherait presque d'appliquer putStrLn à generate, si ce satané generate n'était pas pourri par le IO autour». C'est justement le sens de l'opérateur «bind» : l'application dans une monade :

>>= :: IO a -> (a -> IO b) -> IO b

d'où generate >>= putStrLn :: IO ()

@Sasha @wryk J'aime bien bidouiller des trucs, surtout tant qu'ils sont encore simple, désolé·e. ^^"

@Ambraven @Sasha développer c'est bidouiller avant tout :°

@Sasha @wryk

décidément je suis largué·e...

Main.hs:5:22: error:
* Couldn't match type `Vocabulary.Word' with `[Char]'
Expected type: Vocabulary.Word -> IO ()
Actual type: String -> IO ()
* In the second argument of `(>>=)', namely `putStrLn'
In a stmt of a 'do' block: generate >>= putStrLn
In the expression:
do { generate >>= putStrLn;
putStrLn "hello" }

( non le putStrLn "hello" ne sert à rien... )