{"id":366,"date":"2010-04-26T10:54:08","date_gmt":"2010-04-26T15:54:08","guid":{"rendered":"http:\/\/alarmingdevelopment.org\/?p=366"},"modified":"2010-04-26T12:08:44","modified_gmt":"2010-04-26T17:08:44","slug":"haskell-damage","status":"publish","type":"post","link":"https:\/\/alarmingdevelopment.org\/?p=366","title":{"rendered":"Haskell damage"},"content":{"rendered":"<p>Per Vognsen suggests a Haskell version of the damage function from my Schematic Tables talk:<\/p>\n<pre>\r\ndata Attack = Magic | Melee\r\nhit surprise defense attack = damage\r\n  where effectiveness = power * (if surprise then 3 else 2)\r\n      (power, damage) = case attack of\r\n                        Magic -> (5, max 0 (effectiveness - defense))\r\n                        Melee -> (4, 2 * effectiveness \/ defense)\r\n<\/pre>\n<p>This passes pairs of values (power, damage) through conditionals. That allows the conditionals to multiplex more than one value, rather than being repeated. I suspect I could stymie that approach with more complex data flows, but I am happy to acknowledge that Haskell does OK on this example. Thanks, Per.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Per Vognsen suggests a Haskell version of the damage function from my Schematic Tables talk: data Attack = Magic | Melee hit surprise defense attack = damage where effectiveness = power * (if surprise then 3 else 2) (power, damage) = case attack of Magic -> (5, max 0 (effectiveness &#8211; defense)) Melee -> (4, &hellip; <\/p>\n<p class=\"link-more\"><a href=\"https:\/\/alarmingdevelopment.org\/?p=366\" class=\"more-link\">Continue reading<span class=\"screen-reader-text\"> &#8220;Haskell damage&#8221;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_feature_clip_id":0,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_post_was_ever_published":false},"categories":[1],"tags":[],"class_list":["post-366","post","type-post","status-publish","format-standard","hentry","category-general"],"jetpack_featured_media_url":"","jetpack_shortlink":"https:\/\/wp.me\/pfEnU-5U","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/alarmingdevelopment.org\/index.php?rest_route=\/wp\/v2\/posts\/366","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/alarmingdevelopment.org\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/alarmingdevelopment.org\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/alarmingdevelopment.org\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/alarmingdevelopment.org\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=366"}],"version-history":[{"count":8,"href":"https:\/\/alarmingdevelopment.org\/index.php?rest_route=\/wp\/v2\/posts\/366\/revisions"}],"predecessor-version":[{"id":374,"href":"https:\/\/alarmingdevelopment.org\/index.php?rest_route=\/wp\/v2\/posts\/366\/revisions\/374"}],"wp:attachment":[{"href":"https:\/\/alarmingdevelopment.org\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=366"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/alarmingdevelopment.org\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=366"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/alarmingdevelopment.org\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=366"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}