J'ai créé un nouveau type
Non, vous avez pas. Si vous écrivez type Foo = ...
, vous définissez un alias de type : il n'y a pas de nouveau type, vous avez seulement donné un nouveau nom à un certain type (composite). A partir de maintenant, vous pouvez utiliser Field
et String
entrelacé. Vous définissez de nouveaux types avec data Foo = ...
ou newtype Foo = ...
. Habituellement type Foo = ...
est utilisé pour donner un type spécifique à un type plus complexe. Comme par exemple type NamedStringCollection = (String,[String])
.
Puisque String
et Field
sont du même type, il en va de même pour [String]
et [Field]
. En conséquence, vous n'avez pas besoin de faire de traitement. Si vous avez un [String]
, il s'agit en même temps d'un [Field]
.
Vous pouvez écrire:
parse :: [String] -> [Field]
parse = id -- not necessary
Mais le id
retourne simplement ce que vous lui donnez. Donc id
ne fait aucun travail.
Mais ici vous n'analysez pas: un 'Field' est un' String': vous avez défini un alias de type. Cela signifie que '[String]' est '[Field]'. Vous n'avez pas besoin de faire de traitement. –