我正在学习purescript并尝试记录目录内容。
module Main where
import Prelude
import Data.Traversable (traverse)
import Effect (Effect)
import Effect.Console (log)
import Node.FS.Sync (readdir)
fnames = readdir "."
main = do
travere (\a -> log $ show a) fnames
我想在控制台输出中打印文件夹条目。
我无法摆脱(或通过)从Effect
(我得到Node.FS.Sync (readdir)
)获得的Effect (Array String)
。并且traverse
或log
或show
不能与Effect
前面的Array String
一起使用。
我得到No type class instance was found for Data.Traversable.Traversable Effect
。
答案 0 :(得分:3)
Effect
是程序,不是值。 Effect (Array String)
是一个程序,执行后将产生一个Array String
。您必须先执行程序,才能从程序中取出Array String
。
执行此程序的一种方法是使其成为更大程序的一部分,例如您的main
程序。像这样:
main = do
ns <- fnames
traverse (\a -> log $ show a) ns
当然,实际上没有必要在将其纳入fnames
程序之前将其放入全局变量main
中。您可以直接添加readdir "."
:
main = do
ns <- readdir "."
traverse (\a -> log $ show a) ns