J'ai une question débutante sur les dates et J'ai besoin de faire partie de la date (année, mois ou jour) comme thin mais ce type de type Je comprends que Alors, y a-t-il un moyen d'écrire une fonction comme celle-ci? P> Merci d'avance pour toute aide! P> P> string code> dans HASKELLL.
chaîne code> in haskell . J'ai découvert que si j'écris les deux lignes suivantes dans GHCI P>
lun code> est de type
chaîne code>. Cependant, je suis incapable de mettre cela dans une fonction. J'ai essayé par exemple les éléments suivants: p>
io () code> et j'ai besoin de
string code> (pas non plus
io string code>, seulement
chaîne code>). P>
Do CODE> La déclaration crée une monade, que je ne veux pas, mais je n'ai pas été incapable de trouver une autre solution pour obtenir la date à Haskell. P>
4 Réponses :
Si vous souhaitez renvoyer une chaîne représentant l'heure actuelle, il sera avoir em> à être dans l'IO monade, car la valeur de l'heure actuelle change toujours! Ce que vous pouvez faire est de renvoyer une chaîne dans l'io monade: p> puis, à partir de votre niveau supérieur (par exemple dans Main), vous pouvez transmettre la chaîne autour de: P> > main = do
> s <- getCurrMonth
> ... do something with s ...
Comme Don dit, il n'ya aucun moyen d'éviter d'utiliser des monades dans cette situation. N'oubliez pas que Haskell est un langage fonctionnel pur, et une fonction doit donc toujours renvoyer la même sortie étant donné une entrée particulière. Haskell.org fournit une excellente explication et introduction ici qui vaut certainement la peine d'être examinée. Vous bénéficieriez également de monad introduction comme Ceci Un didacticiel ou un didacticiel d'E / S Haskell comme Celui-ci . Bien sûr, il y a des tonnes plus de ressources en ligne que vous pouvez trouver. Les monades peuvent initialement être intimidantes, mais elles ne sont vraiment pas aussi difficiles qu'elles semblent au début. p>
Oh, et je conseille fortement contre l'utilisation de bonne chance apprendre Haskell! P> inadaperformio code>. Il y a une très bonne raison pour laquelle il a le mot "dangereux" dans le nom, et il n'était définitivement pas créé pour des situations comme celle-ci. L'utilisation de cela ne conduira que de mauvaises habitudes et de problèmes dans la ligne. P>
Merci beaucoup pour vos liens, je peux enfin comprendre les monades un peu mieux. La façon dont nous sommes enseignées, Haskell à l'école est tout à fait déroutant.
Vous ne pouvez pas obtenir qu'une ficelle, elle doit être une chaîne io. En effet, GetCurrons n'est pas une fonction pure, elle renvoie différentes valeurs à des moments différents, il doit donc être dans IO. P>
Si vous voulez vraiment une fonction pure de ce type, vous devez passer à l'heure explicitement comme un paramètre.
import System.Locale (defaultTimeLocale) import System.Time (formatCalendarTime, toUTCTime, getClockTime, ClockTime) main = do now <- getClockTime putStrLn $ getMonthString now getMonthString :: ClockTime -> String getMonthString = formatCalendarTime defaultTimeLocale "%B" . toUTCTime
+1 pour montrer comment garder la "partie impure" aussi petite que possible.