2016-01-20 5 views
4

Вот полный скрипт Elm, который помещает кучу кортежей в элемент HTML <ul>.Могу ли я удалить лямбду из этого выражения Elm?

import Html exposing (ul, li, text) 
import List exposing (map) 

values = [(1,2,3), (4,5,6), (7,8,9)] 

main = 
    ul [] (values |> map (\t -> li [] [text(toString(t))])) 

Мне нравится использовать |> или других операторов высшего порядка, где это возможно, но, учитывая относительно глубоко вложенность t в выражении выше, я не был в состоянии выяснить, хороший способ выразить это линия. Существуют ли в Elm операторы более высокого порядка, которые позволяли бы лямбда \t быть ненужным?

Я понимаю, что было бы более читаемо использовать лямбду, но задавалось вопросом, какие комбинаторы следует использовать здесь, учитывая, что вызов toString находится внутри списка.

ответ

6

Если вы хотите, чтобы избежать лямбда легче начать с values и «трубопровода» это через, превращая его шаг за один раз, чтобы получить его в окончательном виде вы хотите:

import Html exposing (ul, li, text) 
import List exposing (map, repeat) 

values = [(1,2,3), (4,5,6), (7,8,9)] 

main 
    = map toString values 
    |> map text 
    |> map (repeat 1) 
    |> map (li []) 
    |> ul [] 
+1

Удивительный, 'repeat 1' был ключом. Я предпочитаю в данный момент 'main = ul [] (map (li [] << repeat 1 << text << toString) значения)' Другим способом, конечно, будет 'main = values ​​|> map (toString> > текст >> repeat 1 >> li []) |> ul [] ' –

Смежные вопросы