Elm signals and type annotation -



Elm signals and type annotation -

from elm newbie long-time haskeller, quick query.

the aim: there map towns on @ designated positions on it, , want check if user click close town, , identify town.

so, collect signal usual:

clickpositionssignal = sampleon mouse.clicks mouse.position

that gives me tuple, want turn int (denoting number of nearest town). towns designated

positions : [position] type position = {number : int, x : int, y : int}

the function is:

whichtown : (int,int) -> int whichtown (x,y) = allow pz = map (\p -> getdistance p.x p.y x y) positions |> head in pz.number

now, need apply function clickpositionssignal.

looking around various examples, modified code to....

whichlocationsignal : signal int whichlocationsignal = allow wbl (x,y) = whichtown(x,y) in wbl <~ clickpositionssignal

.... , works. number of nearest town.

but hopelessly cumbersome , duplicative. question why can not write:

whichlocationsignal = whichtown clickpositionssignal

that line throws multiple type errors not yet experienced plenty interpret

tl;dr

it should be:

whichlocationsignal = whichtown <~ clickpositionssignal

or

whichlocationsignal = lift whichtown clickpositionssignal

(which figured out yourself)

how read type errors

so total version of code gives these type-errors be:

import mouse type position = {number : int, x : int, y : int} clickpositionssignal : signal (int,int) clickpositionssignal = sampleon mouse.clicks mouse.position positions : [position] positions = [] getdistance x1 y1 x2 y2 = { number = 0 } whichtown : (int,int) -> int whichtown (x,y) = allow pz = map (\p -> getdistance p.x p.y x y) positions |> head in pz.number whichlocationsignal : signal int whichlocationsignal = whichtown clickpositionssignal

the type errors are:

type error on line 19, column 33 53: clickpositionssignal expected type: (int, int) actual type: int type error on line 19, column 33 53: clickpositionssignal expected type: signal.signal actual type: (int) type error on line 19, column 23 32: whichtown expected type: int actual type: signal.signal int

i admit, these type errors confusing. (you might incorrect. can current quality of type errors get, sorry!) 1 basic tip when type error elm doesn't create sense see if makes more sense when flip expected/actual. first type error makes no sense. sec gives information: clickpositionssignal somehow expected have type int, not signal. 3rd error message starts create sense: whichtown other way around int should given signal... @ point can find uses of these 2 together, , 1 time note whichtown works on (int,int) , clickpositionssignal : signal (int,int), you've found error , compiler messages create kind of crooked sense.

the prepare stated above utilize lift : (a -> b) -> signal -> signal b "lift" function (whichtown) signal "level". people prefer utilize infix operator <~.

signals elm

Comments

Popular posts from this blog

formatting - SAS SQL Datepart function returning odd values -

c++ - Apple Mach-O Linker Error(Duplicate Symbols For Architecture armv7) -

php - Yii 2: Unable to find a class into the extension 'yii2-admin' -