Elm練習12


このエントリーをはてなブックマークに追加

引き続きElm練習

Elm練習 archives

今回はデバッグのためにmaybe型を無理やりtext関数で表示させる

Elmはv0.18を用いている
(今回、v0.18から導入された field関数(Elm v0.17では(:=)だった関数)を使ってるので、Elm v0.18でないと動かないと思われる)



Maybe型とかResult型をtextで表示したい


なんか、Maybe型などは単なるstring型とかではないので、そのままtextで表示しようとしても

型エラーが起きて表示されない

Result型からはtoMaybe関数を使えばMaybe型にいけるけどそれ以降はなさそう・・・

ので、自分で関数作って無理やり表示させる

例えば

1
2
3
4
5
6
7
8
9
10
11
12
13
import Json.Decode exposing (..)
import Html exposing (..)
json = """{ "person": { "name": "tom", "age": 42 } }"""
decoding = decodeString (field "person" (field "name" string))
main =
view
view =
text (Result.toMaybe (decoding json))


上記を実行すると下記エラーが出る

1
2
3
4
5
6
7
8
9
10
11
The argument to function `text` is causing a mismatch.
47| text (Result.toMaybe (decoding json)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Function `text` is expecting the argument to be:
String
But it is:
Maybe String


textはString型をとるけど、あなたが引数に渡したのはMaybe String型だよ

って怒られてしまう


なので、自分でMaybe a -> a となる関数を作ってやれば良い

例えば(綺麗なコードではないけど)いかのようなmaybeStringToString関数をつくってやればよい

ResultはMaybeと同じで暗黙的にimportされてるのでimportしなくてよい

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
import Json.Decode exposing (..)
import Html exposing (..)
json = """{ "person": { "name": "tom", "age": 42 } }"""
decoding = decodeString (field "person" (field "name" string))
main =
view
view =
text (maybeStringToString (Result.toMaybe (decoding json)))
maybeStringToString : Maybe String -> String
maybeStringToString msg =
case msg of
Just x -> x
Nothing -> ""

これで$ elm-reactorlocalhost:8000 を確認してみると、画面に tomと表示されるはず


このエントリーをはてなブックマークに追加