[{"data":1,"prerenderedAt":430},["ShallowReactive",2],{"project-8631158":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":29,"sentiment":30,"stance_mix":31,"scored_comments":35,"aspects":36,"strip":46,"post_text":47,"what":48,"said":87,"maker_in_thread":170,"shape":180,"grid":183,"attempts":391,"same_week":392,"maker_shows":45,"maker_hidden":422,"reader_version":423,"card":424},"8631158","LanguageExt","C# 6.0 Functional Language Extensions","title","Show HN: C# 6.0 Functional Language Extensions","https:\u002F\u002Fgithub.com\u002Flouthy\u002Flanguage-ext","github.com","louthy",1416416774,2014,164,87,141,2272,7,"notable","languages","functional programming library","library",[24,25,26,27,28],"csharp","functional programming","option type","monads","linq","debated",-0.123,{"positive":32,"neutral":33,"mixed":34,"critical":33},9,11,5,36,{"execution":37,"design":40,"idea":42,"performance":44},{"positive":38,"critical":39},0,2,{"positive":39,"critical":41},3,{"positive":43,"critical":34},6,{"positive":38,"critical":45},1,[45,45,41,45,41,41,41,41,38,45,38,38,38,38,38,41,34,34,41,38,38,38,38,38,38,41,38,38,45,34,34,41,45,41,34,45,45,41,34,39],null,{"problem":49,"audience":62,"pricing":47,"motivation":74,"time_to_build":47,"stack":79,"openness":85,"stage":86,"team_size":85},{"value":50,"source":51,"evidence":52},"Brings functional constructs like Option types and tuples to C#, removing null-related bugs.","maker",[53,56,59],{"id":54,"by":11,"text":55},"8634015","I hear what you're saying, but I felt that the reason for using Option in C# would be explicitly to deny nulls. If you are OK with accepting null, don't use Option and return…",{"id":57,"by":11,"text":58},"8632466","I'm involved with a 9 year old C# project, it has seen almost every version of C#. When generics turned up that was nice, then LINQ, very nice, etc, etc. I like to see how far I…",{"id":60,"by":11,"text":61},"8632121","That's fair enough. I knew implementing it this way would ruffle a few feathers, and I totally understand why. I too would love to see (\"a\",\"b\"), and proper pattern matching...…",{"value":63,"source":64,"evidence":65},"C# developers wanting functional style code","inferred",[66,70],{"id":67,"by":68,"text":69},"8632813","pjmlp","> Why bent C# until it looks like something that already exists? Because in the industry at large, JVM == Java and .NET == VB.NET == C#. So bending Java, C# and C++ to have…",{"id":71,"by":72,"text":73},"8633257","runT1ME","Our organization (big C# codebase, newer apps in scala) has doubled down on extremely functional C# (using the NICTA XShapx library which has a lot of overlap with this one).…",{"value":75,"source":51,"evidence":76},"Weekend project to bend C# toward F# and Haskell style, to avoid null bugs.",[77,78],{"id":57,"by":11,"text":58},{"id":60,"by":11,"text":61},[80],{"value":81,"source":51,"evidence":82},"C#",[83],{"id":84},"post","unknown","beta",{"praise":88,"objections":103,"requests":136,"questions":142,"alternatives":150},[89,95],{"value":90,"source":91,"evidence":92},"Useful for bringing functional style to C# codebases","commenter",[93,94],{"id":71,"by":72,"text":73},{"id":67,"by":68,"text":69},{"value":96,"source":91,"evidence":97},"Option design that forces handling of None",[98,102],{"id":99,"by":100,"text":101},"8631772","steego","Funny I come across this today. Only yesterday did I start turning some of my helper functions and extension methods into a little NuGet library. It's amazing how much overlap…",{"id":60,"by":11,"text":61},[104,115,126],{"value":105,"source":91,"evidence":106},"Option should preserve null or be algebraically consistent",[107,111],{"id":108,"by":109,"text":110},"8633986","MichaelGG","Coercing Some (null) to None seems like a bug. Null is a valid value in the type and should be allowed (F# allows it too). Otherwise, a function might accidentally return None…",{"id":112,"by":113,"text":114},"8634000","Strilanc","A comment on the option type: I think transforming Some(null) into None is wrong. - There is an x for which Some(x) is not a Some. This violates useful invariants. -…",{"value":116,"source":91,"evidence":117},"Unidiomatic C# and lowercase function names",[118,122],{"id":119,"by":120,"text":121},"8632092","martijn_himself","This is a really interesting experiment, although personally I'd find using: var ab = tuple(\"a\",\"b\"); awful. It's very hard to read what is going on here- someone else reading…",{"id":123,"by":124,"text":125},"8635102","CmonDev","This is a really cool exploration project, but hopefully I will not see this in any production code. Way too un-idiomatic.",{"value":127,"source":91,"evidence":128},"Why not just use F# instead",[129,133],{"id":130,"by":131,"text":132},"8632330","danbruc","I hope this does not come across to negative, definitely a nice project, but is this really useful in practice? If you want F# or Haskell syntax, why not just use F# or Haskell?…",{"id":134,"by":131,"text":135},"8632450","I am not saying the functionality is useless, but it already exists in other languages. Why force C# to look and behave like F# instead of just using F#?",[137],{"value":138,"source":91,"evidence":139},"Support for native C# tuple syntax and pattern matching",[140,141],{"id":119,"by":120,"text":121},{"id":60,"by":11,"text":61},[143],{"value":144,"source":91,"evidence":145},"Does Option\u003CT> parameter still allow null",[146],{"id":147,"by":148,"text":149},"8631887","bcbrown","Cool stuff. Isn't there still a problem with Option, where when a method takes Option\u003CT> as a parameter, invocations can pass null for that Option\u003CT>? So there's still the…",[151,159,163],{"value":152,"source":91,"evidence":153},"F#",[154,155],{"id":130,"by":131,"text":132},{"id":156,"by":157,"text":158},"8633657","nbevans","Just use F# from Xamarin. It's the real deal. C# is just a stop-gap measure to suck in the enterprise devs.",{"value":160,"source":91,"evidence":161},"NICTA XShapx",[162],{"id":71,"by":72,"text":73},{"value":164,"source":91,"evidence":165},"lambit",[166],{"id":167,"by":168,"text":169},"8632215","dstone16321","Feel free to pilfer some ideas from my own take on a similar lib for C#. https:\u002F\u002Fgithub.com\u002Fdanstone\u002Flambit - includes some basic pattern matching support for example. This sort…",{"comments":171,"answered":32,"key":172},27,[173,174,177],{"id":54,"text":55},{"id":175,"text":176},"8635380","I'm definitely starting to lean that way. Thanks for the feedback.",{"id":178,"text":179},"8635377","> Perhaps something with \"unsafe\" or \"unguarded\" in the name. That seems like a reasonable approach.",{"commenters":35,"max_depth":33,"maker_replies":171,"first_comment_mins":181,"lifespan_hours":182},97,52,[184,186,188,191,193,196,198,200,202,204,207,209,212,214,217,219,221,224,227,229,231,235,239,241,243,245,248,251,254,256,259,262,265,268,269,271,272,273,274,277,279,283,286,287,290,292,294,296,298,301,303,305,307,310,312,314,316,318,320,322,324,326,329,332,334,338,341,343,344,346,348,350,351,353,355,357,360,362,365,369,371,373,376,378,381,385,389],[108,38,45,185,109,38],"project\u002Fcritical\u002Fexecution",[54,38,38,187,11,45],"project\u002Fneutral\u002Fdesign",[189,38,45,185,190,38],"8634990","hjnilsson",[175,38,38,192,11,45],"maker\u002Fneutral\u002Fnone",[194,38,41,187,195,38],"8635353","lomnakkus",[178,38,38,197,11,45],"commenter\u002Fneutral\u002Fnone",[112,45,45,199,113,38],"project\u002Fcritical\u002Fdesign",[201,45,38,187,11,45],"8634034",[203,45,41,187,109,38],"8634511",[205,45,41,187,206,38],"8634635","dragonwriter",[208,45,38,187,11,45],"8635239",[210,45,41,187,211,38],"8635328","wtetzner",[213,45,38,187,11,45],"8635368",[215,45,41,216,206,38],"8636034","project\u002Fneutral\u002Fidea",[218,45,38,197,11,45],"8636142",[220,45,41,187,206,38],"8636221",[222,45,38,223,11,45],"8636381","commenter\u002Fpositive\u002Fnone",[225,39,38,226,11,45],"8632767","project\u002Fneutral\u002Fnone",[228,39,38,226,11,45],"8635743",[130,41,45,230,131,38],"project\u002Fcritical\u002Fidea",[232,41,38,233,234,38],"8632350","other\u002Fneutral\u002Fidea","BigChiefSmokem",[236,41,38,237,238,38],"8632973","other\u002Fneutral\u002Fnone","bbcbasic",[240,41,38,237,11,45],"8633066",[242,41,38,237,238,38],"8633794",[244,41,38,237,11,45],"8634291",[246,41,38,237,247,38],"8634880","tonyedgecombe",[249,41,38,237,250,38],"8634898","weavie",[252,41,38,237,253,38],"8634118","codygman",[255,41,38,197,109,38],"8634531",[257,41,38,197,258,38],"8635623","MrDosu",[260,41,38,233,261,38],"8636171","SideburnsOfDoom",[263,41,38,237,264,38],"8636331","lispm",[266,41,34,267,168,38],"8632399","project\u002Fpositive\u002Fidea",[134,41,45,230,131,38],[270,41,34,267,168,38],"8632562",[57,41,38,216,11,45],[67,41,34,267,68,38],[71,41,34,267,72,38],[275,41,41,276,109,38],"8633963","project\u002Fmixed\u002Fidea",[278,41,38,226,11,45],"8634048",[280,281,41,226,282,38],"8631875",4,"saosebastiao",[284,281,38,237,285,38],"8632021","sandyarmstrong",[156,281,38,237,157,38],[288,281,38,289,282,38],"8633789","other\u002Fneutral\u002Fdocs",[291,281,38,197,11,45],"8633819",[293,281,38,197,282,38],"8633850",[295,281,38,197,11,45],"8633991",[297,281,38,237,109,38],"8634519",[299,281,38,237,300,38],"8634770","icedog",[302,281,38,237,124,38],"8635098",[304,281,38,237,109,38],"8639566",[306,281,38,237,124,38],"8640575",[308,281,38,237,309,38],"8634071","nmgafter",[311,281,38,237,11,45],"8634103",[313,281,38,197,124,38],"8635095",[99,34,41,315,100,38],"project\u002Fmixed\u002Fdesign",[317,34,38,187,11,45],"8631826",[319,34,38,237,100,38],"8632090",[321,34,38,237,11,45],"8632154",[323,34,38,237,100,38],"8632263",[325,34,38,192,11,45],"8632326",[327,34,45,230,328,38],"8634797","Too",[330,34,41,187,331,38],"8633116","jpatte",[333,34,38,197,100,38],"8643302",[335,34,34,336,337,38],"8635293","project\u002Fpositive\u002Fdesign","harveywi",[339,43,34,267,340,38],"8632024","tommyd",[342,43,38,237,11,45],"8632136",[167,18,41,315,168,38],[345,18,38,187,11,45],"8632271",[347,18,41,315,168,38],"8632346",[119,349,45,199,120,38],8,[60,349,38,187,11,45],[352,349,41,276,120,38],"8632173",[354,349,38,192,11,45],"8632994",[356,349,34,336,109,38],"8633969",[358,32,41,359,238,38],"8632463","project\u002Fneutral\u002Fperformance",[361,32,38,359,11,45],"8632569",[363,32,45,364,109,38],"8633956","project\u002Fcritical\u002Fperformance",[366,367,45,230,368,38],"8635410",10,"NKCSS",[370,367,38,197,11,45],"8635497",[147,33,41,372,148,38],"project\u002Fneutral\u002Fexecution",[374,33,41,372,375,38],"8631903","infogulch",[377,33,38,372,11,45],"8631961",[379,33,34,380,148,38],"8632195","project\u002Fpositive\u002Fnone",[382,383,34,267,384,38],"8632643",12,"rukugu",[386,387,45,199,388,38],"8634816",13,"TazeTSchnitzel",[123,390,45,230,124,38],14,[],[393,398,403,408,413,418],{"id":394,"name":395,"points":396,"category":397},"8608358","Explained Visually",353,"learning_science",{"id":399,"name":400,"points":401,"category":402},"8616738","pyspider",159,"dev_tools",{"id":404,"name":405,"points":406,"category":407},"8615416","SineRider",137,"games",{"id":409,"name":410,"points":411,"category":412},"8631223","Picky Pint",134,"consumer_social",{"id":414,"name":415,"points":416,"category":417},"8623864","WikiWash",131,"productivity",{"id":419,"name":420,"points":421,"category":407},"8627793","Axis",110,false,"v2",{"id":425,"name":5,"line":6,"ai":422,"cat":20,"year":13,"points":14,"comments":15,"rec":29,"s":426,"top":18,"kw":427,"maker":11,"domain":10,"tier":19,"attempts":38,"strip":428,"url":9,"mix":429,"praise":90,"objection":105,"sub":21},8631158,-0.12,[24,25,26,27,28],"1131333301000003553000000300155313511352",[32,33,34,33],1794036525257]