Ainsi, les œuvres suivantes dePureScript ne compose pas `trace` et` show`
main = do
trace $ show $ 5
mais cela ne
main = do
(trace . show) 5
dans pSIC le type de trace est
forall r. Prim.String -> Control.Monad.Eff.Eff (trace :: Debug.Trace.Trace | r) Prelude.Unit
et le type de spectacle est
forall a. (Prelude.Show a) => a -> Prim.String
puisque la valeur de retour de show est Prim.String
et la première entrée dans la trace est Prim.String
ils doivent être composables. Ceci est en outre démontré par le fait que trace $ show
passe le contrôle de type. Mais à la place, j'ai cette erreur:
Error at line 1, column 10:
Error in declaration it
Cannot unify Prim.Object with Prim.Function Prim.String.
Qu'est-ce qui me manque ici? En ce moment mon modèle mental est que trace
est très similaire à putStrLn
dans Haskell, et que l'on peut certainement composer avec show
. (putStrLn . show) 5
œuvres.
type attendu de résultat composé de trace et spectacle:
forall a r. (Prelude.Show a) => a -> Control.Monad.Eff.Eff (trace :: Debug.Trace.Trace | r) Prelude.Unit
Quelle est la composition standard alors? – Fresheyeball
@Fresheyeball: N'a trouvé aucun dans la documentation. Vous pouvez en écrire un vous-même, mais le JavaScript compilé semble trop compliqué. – Zeta
Je préfère ne pas, il appartient vraiment dans le prélude. – Fresheyeball