[{"data":1,"prerenderedAt":137},["ShallowReactive",2],{"project-10887561":3},{"id":4,"name":5,"line":6,"line_source":7,"title":8,"url":9,"domain":10,"maker":11,"posted_at":12,"year":13,"points":14,"comments":15,"rank_in_year":16,"shown_in_year":17,"top":18,"tier":19,"category":20,"subcategory":21,"format":22,"keywords":23,"reception":28,"sentiment":29,"stance_mix":30,"scored_comments":33,"aspects":34,"strip":37,"post_text":29,"what":39,"said":60,"maker_in_thread":85,"shape":88,"grid":91,"attempts":98,"same_week":99,"maker_shows":90,"maker_hidden":130,"reader_version":131,"card":132},"10887561","hadolint","Static Analysis Tool for Dockerfiles in Haskell","title","Show HN: Static Analysis Tool for Dockerfiles in Haskell","https:\u002F\u002Fgithub.com\u002Flukasmartinelli\u002Fhadolint","github.com","morgenkaffee",1452608949,2016,63,3,611,2264,27,"notable","dev_tools","static analysis linter","cli",[24,25,26,27],"dockerfile","linter","static analysis","haskell","quiet",null,{"positive":31,"neutral":31,"mixed":32,"critical":32},1,0,2,{"execution":35,"idea":36},{"positive":32,"critical":32},{"positive":31,"critical":32},[32,15,38],5,{"problem":40,"audience":29,"pricing":29,"motivation":29,"time_to_build":29,"stack":46,"openness":59,"stage":59,"team_size":59},{"value":41,"source":42,"evidence":43},"Checking Dockerfiles for problems through static analysis","inferred",[44],{"id":45},"post",[47,55],{"value":48,"source":49,"evidence":50},"Haskell","maker",[51,52],{"id":45},{"id":53,"by":11,"text":54},"10887984","I can only encourage to use Haskell for such kinds of problems. This was my first Haskell program and I was productive quite fast thanks to \"Learn you a Haskell\" and the great…",{"value":56,"source":49,"evidence":57},"Parsec parsing library",[58],{"id":53,"by":11,"text":54},"unknown",{"praise":61,"objections":70,"requests":71,"questions":79,"alternatives":84},[62],{"value":63,"source":64,"evidence":65},"Code looks good to an experienced Haskeller","commenter",[66],{"id":67,"by":68,"text":69},"10890459","boothead","The code looks good. One thing you might want to consider is using applicative style for parsing. So ``` taggedImage :: Parser BaseImage taggedImage = do name \u003C- many (noneOf…",[],[72],{"value":73,"source":64,"evidence":74},"Build a Code Climate engine from it",[75],{"id":76,"by":77,"text":78},"10889695","dominotw","i would be nice to make codeclimate engine out of this. https:\u002F\u002Fdocs.codeclimate.com\u002Fdocs\u002Flist-of-engines",[80],{"value":81,"source":49,"evidence":82},"Is the code idiomatic Haskell?",[83],{"id":53,"by":11,"text":54},[],{"comments":31,"answered":32,"key":86},[87],{"id":53,"text":54},{"commenters":15,"max_depth":33,"maker_replies":31,"first_comment_mins":89,"lifespan_hours":90},69,7,[92,94,96],[53,32,32,93,11,31],"maker\u002Fneutral\u002Fnone",[67,32,15,95,68,32],"maker\u002Fneutral\u002Fexecution",[76,31,38,97,77,32],"project\u002Fpositive\u002Fidea",[],[100,105,110,115,120,125],{"id":101,"name":102,"points":103,"category":104},"10872143","gradient.quasi.ink",448,"creative",{"id":106,"name":107,"points":108,"category":109},"10896901","awk-raycaster",350,"games",{"id":111,"name":112,"points":113,"category":114},"10890531","2Sli.de",244,"productivity",{"id":116,"name":117,"points":118,"category":119},"10869046","Charme",167,"consumer_social",{"id":121,"name":122,"points":123,"category":124},"10897121","Patchwork",122,"security_privacy",{"id":126,"name":127,"points":128,"category":129},"10887071","Libconcurrent",91,"languages",false,"v2",{"id":133,"name":5,"line":6,"ai":130,"cat":20,"year":13,"points":14,"comments":15,"rec":28,"s":29,"top":18,"kw":134,"maker":11,"domain":10,"tier":19,"attempts":32,"strip":135,"url":9,"mix":136,"praise":63,"objection":-1,"sub":21},10887561,[24,25,26,27],"035",[31,31,32,32],1793990936155]