Um ein wenig über Turtle
zu lernen, dachte ich, es wäre nett, Beispiel aus dem Tutorial zu ändern. Ich entschied mich, den reduktiven "FilePath" aus jeder Zeile der Ausgabe zu entfernen, da ich dachte, es wäre eine einfache Übung.Wie können Pfade mit der Haskell Turtle-Bibliothek gedruckt werden?
Und trotzdem, trotz der Bemühungen des Autors, seine Bibliothek einfach zu benutzen, habe ich es fast nicht benutzt, um dieses einfache Problem zu lösen.
habe ich versucht, every ich sah, dass sah aus wie es mir irgendwie >>=
von IO
in Shell
erlauben würde, heben: MonadIO
, FoldM
, liftIO
, _foldIO
ohne Erfolg. Ich wurde frustriert und nur durch das Lesen von Turtle
Quellcode konnte ich etwas finden, das zu funktionieren scheint ("keine offensichtlichen Mängel" in den Sinn kommen).
Warum ist das so schwer? Wie kommt man logischerweise mit der API dieser Bibliothek zu einer Lösung?
#!/usr/bin/env stack
-- stack --resolver lts-8.17 --install-ghc runghc --package turtle --package lens
{-# LANGUAGE OverloadedStrings #-}
import Turtle
import Control.Lens
import Control.Foldl as Foldl
import Filesystem.Path.CurrentOS
import Data.Text.IO as T
import Data.Text as T
main = do
homedir <- home
let paths = lstree $ homedir </> "projects"
let t = fmap (Control.Lens.view _Right . toText) paths
customView t
customView s = sh (do
x <- s
liftIO $ T.putStrLn x)