2014-11-15 1 views
1

이 코드는 http://elm-lang.org/edit/examples/Intermediate/Stamps.elm에서입니다. 나는 사소한 변화를했습니다, 아래를보십시오.지도 함수를 임의의 숫자로 사용하는 방법

import Mouse 
import Window 
import Random 

main : Signal Element 
main = lift2 scene Window.dimensions clickLocations 

-- for a good time, remove "sampleOn Mouse.clicks" ;) 
clickLocations : Signal [(Int,Int)] 
clickLocations = foldp (::) [] (sampleOn Mouse.clicks Mouse.position) 

scene : (Int,Int) -> [(Int,Int)] -> Element 
scene (w,h) locs = 
    let p = Random.float (fps 25) 
     drawPentagon p (x,y) = 
      ngon 5 20 |> filled (hsla p 0.9 0.6 0.7) 
        |> move (toFloat x - toFloat w/2, toFloat h/2 - toFloat y) 
        |> rotate (toFloat x) 
    in layers [ collage w h (map (drawPentagon <~ p) locs) // I want to change different color each time, error here! 
      , plainText "Click to stamp a pentagon." ] 

어떻게지도 기능을 사용할 때 신호를 전달할 수 있습니까? 코드에서

답변

2

, 당신은지도의 Signal ((Int, Int) -> Form)

유형은 유형의 오류를 일으키는 map : (a -> b) -> [a] -> [b] 인 유형이 drawPentagon <~ p 있습니다. 기본적으로 mapa -> b 기능을 기대하지만 Signal ((Int, Int) -> From)이라고 지정했습니다. 시도하고 당신이 무슨 일을하는지 달성하기

한 가지 방법은 pscene의 매개 변수를 확인하고 Random.float (fps 25)에 전달하는 lift3을 사용하는 것입니다. 따라서 다음과 같이 끝낼 수 있습니다.

import Mouse 
import Window 
import Random 

main : Signal Element 
main = lift3 scene Window.dimensions clickLocations (Random.float (fps 25)) 

-- for a good time, remove "sampleOn Mouse.clicks" ;) 
clickLocations : Signal [(Int,Int)] 
clickLocations = foldp (::) [] (sampleOn Mouse.clicks Mouse.position) 

scene : (Int,Int) -> [(Int,Int)] -> Float -> Element 
scene (w,h) locs p = 
    let drawPentagon p (x,y) = 
      ngon 5 20 |> filled (hsla p 0.9 0.6 0.7) 
        |> move (toFloat x - toFloat w/2, toFloat h/2 - toFloat y) 
        |> rotate (toFloat x) 
    in layers [ collage w h (map (drawPentagon p) locs) 
      , plainText "Click to stamp a pentagon." ] 

이 작업을 수행하려고 했습니까?

관련 문제