Elm:
Textdatei einlesen
How to:
Elm macht direktes Einlesen von Dateien etwas anders – es verwendet hauptsächlich Ports und Subscriptions, um Dateien über JavaScript zu verarbeiten. Hier ist ein kleines Beispiel mit einem Port:
port module Main exposing (..)
import Html exposing (Html, button, div, text)
import Html.Events exposing (onClick)
port readFile : String -> Cmd msg
port fileRead : (String -> msg) -> Sub msg
type Msg = ReadFile | FileRead String
main =
Html.program
{ init = ( "Click to read file", Cmd.none )
, view = view
, update = update
, subscriptions = \_ -> fileRead FileRead
}
view model =
div []
[ button [ onClick ReadFile ] [ text "Read File" ]
, div [] [ text model ]
]
update msg model =
case msg of
ReadFile ->
( model, readFile "filename.txt" )
FileRead contents ->
( contents, Cmd.none )
Deep Dive:
Historisch gesehen ist Elm stark auf Web-Anwendungen ausgerichtet, weshalb direkter Zugriff auf das Dateisystem nicht Teil des Sprachdesigns ist. Alternativ kommt man über JavaScript-Interoperabilität ans Ziel: Mit Ports sendet man Signale an JavaScript, das dann die Dateioperationen handhabt. Der Umgang mit Ports ist für side-effect-behaftete Operationen wie Dateizugriffe typisch. Das stellt sicher, dass Eure pure Funktionen rein bleiben.
See Also:
- Elm Ports Dokumentation: Elm Ports
- Ein einführender Blogpost zu Elm und Dateien: Elm & Files Blogpost