Как пройти через эффект (Array String) в purescript - PullRequest
1 голос
/ 11 июля 2019

Я изучаю 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.

1 Ответ

3 голосов
/ 11 июля 2019

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
...