J'essaie de faire une simple déclaration conditionnelle qui vérifie si une valeur est égale à une autre valeur, puis définit un booléen sur true ou false, mais j'ai des difficultés.

Jusqu'à présent, j'ai essayé de reformater mon texte de plusieurs manières différentes, dont aucune n'a fonctionné, mais je ne trouve pas beaucoup d'aide dans la documentation officielle ou de googler le problème.

import Data.List

numberB :: Integer
numberB = 10
eql :: Integer -> Bool
eql = 10
if eql == numberB
  then True
  else False

L'erreur que je reçois actuellement dit:

functions.hs:14:1: error:
    Parse error: module header, import declaration
    or top-level declaration expected.
   |
14 | if eql == numberB
   | ^^^^^^^^^^^^^^^^^...

Je ne suis pas entièrement certain de ce qu'il cherche à faire ici, car je ne trouve aucune déclaration d'importation efficace. Je ne pense pas non plus qu'il y ait vraiment de modules que j'aie besoin d'utiliser, car je ne fais pas de module ici, et, comme je l'ai déjà mentionné, je n'ai trouvé aucune déclaration d'importation qui pourrait faire fonctionner cela. Je ne sais pas non plus ce qu'est une déclaration de haut niveau, car je ne suis pas très expérimenté à Haskell. Cela dit, je ne sais pas ce que cela ferait même pour corriger cette erreur.

Toute aide serait très appréciée.

2
Jordan Durci 4 nov. 2019 à 10:12

2 réponses

Ralentissons un peu les choses, tout d'abord, passons en revue le type d'eq:

(==) :: Eq a => a -> a -> Bool

Vous voulez comparer deux Integer

numberB :: Integer
numberB = 10
eql :: Integer
eql = 10

Et oui, une façon de faire:

comparision = if eql == numberB
              then True
              else False

Mais par définition de == vous pouvez supprimer le if, est redondant, donc:

comparisionShort = eql == numberB

Et rappelez-vous aussi, dans Haskell, vous devez lier les valeurs à quelque chose, vous ne pouvez pas simplement écrire un if comme ça.

3
Damián Rafael Lattenero 4 nov. 2019 à 07:44

Vous avez déclaré que eql est un Integer -> Bool qui est une fonction qui prend Integer et renvoie bool, puis lui attribue une valeur Integer 10. Contrairement aux langages typés dynamiquement comme python, vous ne pouvez pas réattribuer aux variables une valeur de type différent. Ce que vous voulez probablement, c'est:

numberA ::Integer
numberB ::Integer
eql :: Bool
numberA = 10
numberB = 10
eql = numberA == numberB

2
Yogendra 4 nov. 2019 à 07:25