분명히 Elm 코드는`()` 사용하지 않을 정도로 멋지다.

취미로 Elm 만져서, 잘 모르지만 어쩐지 움직이는 것 같은 느낌으로 하고 있는, 함수형 언어 아마추어의 다이나믹 HTML 코더인 나 시선의 내용입니다.
따라서 얕은 학자가 함수 유형을 말할 때 더 어려워지는 유형은 앞으로 읽지 마십시오.

그런데 본제에 들어가지만, Elm은 함수를 적용할 때 () 를 사용하지 않는 언어입니다.
JS에서,
func(arg)

그건 Elm에서
func arg

라고 씁니다.
그러나 이런 JS 코드
func1(func2(arg))

Elm으로 표현하려고 할 때,
func1 func2 arg

라고 쓰면 다른 거동이 됩니다. 이것은
func1(func2)(arg)

에 해당합니다.
Elm은 산수의 식의 우선 순위를 붙이는 느낌으로 () 를 사용할 수 있으므로,
func1 (func2 arg)

라고 쓰는 것이 정답입니다.
하지만, 숙련된 Elmers의 코드를 봐도 이 쓰는 방법은 별로 보이지 않네요.
대신 이런 걸 잘 봅니다.
func1 <| func2 arg
<| 라고 뭐야 물고기의 머리인가요?
어라, func1 <| func2 arg 라고 func1 (func2 arg)

<| 뭐야.



문서에 의하면 <| 는 후방 함수 적용(어째서 그것?) 하는 함수로, 이런 일이라고 합니다.

(<|) : (a -> b) -> a -> b



Elm의 유형을 보는 방법을 간략하게 설명하면,Int 는 "Int를 반환하는 함수"Int -> String 는 "Int를 인수로 취하고 String을 반환하는 함수"Bool -> Int -> String는 "Bool과 Int를 인수로 취하고 String을 반환하는 함수"(Bool -> Int) -> String 는 ""Bool을 인수로 취하고 Int를 반환하는 함수"를 인수로 취하고 String을 반환하는 함수"
라고 읽으면 좋다. 또, 타입의 사촌을 a처럼 소문자로 쓰면 타입 변수가 되어 제네릭이 되는 것 같다.

그러므로 <| 는 "임의 유형 a를 인수에 대해 임의 유형 b를 반환하는 함수"와 "같은 유형 a"를 인수에 대해 "같은 유형 b"를 반환하는 함수입니다! 알다시피!
저 정도의 고졸 히모노로가 된다면 진짜로 말하고 있는 의미를 모릅니다만, 요점은 함수 적용의 별칭이라고 합니다.
게다가 중간 함수와 함께 인수 사이에 쓸 수 있는 함수라고 합니다. 자유롭다.

즉 func arg == (<|) func arg == func <| arg 뭐라고.
이것이라고 사용하는 의미가 없지만, func1 (func2 arg) 그렇다면 <| 사용하면,
평가의 순서가 바뀐다든가로 func1 <| func2 arg 와 ()
실제로, Elm에는 튜플이라는 형식이 (a, b) 같은 문법이므로, 그것과 혼동해서 혼동하기 때문에 확실히 () 사용하지 않는 편이 알기 쉬울지도.

그리고이 물고기의 머리에는 전방 함수를 적용하는 오른쪽 버전도 있습니다. 넙치와 카레이적인 일일까.

(|>) : a -> (a -> b) -> b


func arg == (|>) arg func == arg |> funcfunc1 (func2 arg) 를 func2 arg |> func1 라고 쓸까 func1 arg <| func2 라고 쓸지만의 차이라고 생각합니다만, 숙련 Elmers의 경향으로서는,func1 (func2 (func3 (func4 (func5 (func6 arg))))) 같이 적용해 버리고 있을 때는
func6 arg
    |> func5
    |> func4
    |> func3
    |> func2
    |> func1

같은 느낌으로 카레이를 사용하고 있는 것을 자주 보는 생각이 듭니다.
JS의 Promise의 체인과 같은 느낌으로 비교적 확고해질지도.

요약



흠, 뭐, 잘 모르겠지만, 그렇게 쓰면 좋네, 라는 느낌의 지능이지만,
우선 () 붙이지 않는 것이 멋지다고 하는, 그 생애에게는 심파시를 느꼈다, 라고 하는 이야기.

좋은 웹페이지 즐겨찾기