Overcoming limitation with polymorphic type in haskell -


i have type so,

data agentspec = agentspec                       { agent ::                      , events :: [bytestring]                       } deriving (show) 

and other types so,

data java = java data php = php 

i trying create function of type,

allevents :: [agentspec a] -> [bytestring] allevents aspec = concatmap events aspec 

but unable create values of type [agentspec a]

if do,

allevents [agentspec java ["event1, "event2"], agentspec php ["event3, "event4"]] 

it not typecheck , understandably so. doesn't type check because, agentspec java not agentspec a

so understand why not work. not know how overcome limitation without writing lot of duplicate code.

one alternatve manually construct list of type,

allevents :: [bytestring] allevents = ["event1", "event2", "event3", "event4"]. 

but feel i'm rewriting things i've modelled in types. there way make use of existing types want? concatenated list of bytestrings of agentspecs

this code:

allevents [agentspec java ["event1, "event2"], agentspec php ["event3, "event4"]] 

doesn't compile because agentspec java ["event1, "event2"] , agentspec php ["event3", "event4"]are of different types, , lists in haskell can contain 1 type. agentspec [bytestring] can created type a, once created can't mixed values of different type.

i don't know you're modeling, typically i'd recommend this:

data language = java | php  data agentspec = agentspec                       { agent :: language                      , events :: [bytestring]                       } deriving (show)  allevents = [agentspec java ["event1", "event2"], agentspec php ["event3", "event4"]] 

based on comment writing library, though, doesn't sound work. can elaborate on you're trying achieve?


Comments

Popular posts from this blog

Sass watch command compiles .scss files before full sftp upload -

filehandler - java open files not cleaned, even when the process is killed -

gridview - Yii2 DataPorivider $totalSum for a column -