Function with parameter in Haskell -
i'm trying write function has parameter in can specify want function.
example: first create few shapes following functions:
circle1 :: radius -> shape circle r = shape (circle r) circle2 :: radius -> shape circle2 r = shape (circle r) rectangle :: side -> side -> shape rectangle x y = shape (rectangle x y) now let's want function in can specify want see circles, how create such function? function this:
getshapes(circle) and output this:
circle1 circle2
at first restructure shape type:
data shape = circle {r :: double} | rectangle {l :: double, w :: double} deriving (show) now let think bit type of function getshapes, in opinion should have 2 things input 1 predicate of shapes i'd back, , 2 shapes choose, so
getshapes :: (shape -> bool) -> [shapes] -> [shapes] would reasonable choice - next step - hoogle stuff , see second function (filter) seems suitable candidate our task.
getshapes = filter so remaining step build circle-function, called predicate.
circle :: shape -> bool circle (circle _) = true circle _ = false if you're new haskell - here lies 1 of powerful concepts of haskell: pattern matching
circle (circle _) checks if argument has type circle, type constructor in oo language. _ known i-don't-care-variable used when name suits. circle checks if shape got circle , doesn't care radius has , returns true - or - in other case returns false. work, if weeks later decided add shape by
data shape = circle {r :: double} | rectangle {l :: double, w :: double} | ellipsis {a :: double, b :: double} deriving (show) so getshape circle [circle1, ellipsis1, circle2, rectangle1, rectangle2] should yield [circle1,circle2].
Comments
Post a Comment