- November 5th, 2017: f :: Map Int [a] -> [b] - > [(Int, b)]
for, e.g.: f mapping bs
length bs == length (concat (Map.elems mapping))
define f - Andreas Källberg @Anka213 Using parallel list comprehensions:
f mp bs = [ (k,b) | (k,as) <-assocs mp, a <- as | b <- bs] - Steve Trout @strout f = zip . foldMapWithKey (fmap . const)
Incorporates strong typing over predicate logic programming, and, conversely, incorporates predicate logic programming into strongly typed functional languages. The style of predicate logic is from Prolog; the strongly typed functional language is Haskell.
Friday, December 29, 2017
November 2017 1HaskellADay 1Liner problem and solutions
Thursday, November 30, 2017
November 2017 1HaskellADay problems and solutions
- November 30th, 2017: For Thursday's #haskell problem we've published our articles to the PostgreSQL database, now let's extract them as JSON. Today's #haskell solution is a simple SQL query and applying some work from previous exercise to fetch and JSONify recommended articles to print!
- November 29th, 2017: For Wednesday's #haskell problem, now that we've selected the recommended articles, let's save that for review to the PostgreSQL database. For today's #haskell solution, we delete the old recommendations-to-be-published, we insert the new set. Voilà!
- November 28th, 2017: Monday we added articles from a PostgreSQL database using #haskell; Tuesday we delete articles. WHEEEEE! Today's #haskell solution shows that deleting article recommendations is very much like adding recommendations, ... in reverse. WHODATHUNK!
- November 27th, 2017: Monday's problem: "It's not rocket science!" Adding articles to a recommendation set in PostgreSQL with #haskell. A little bit of #haskell; a little bit of #PHP and we have an article-adder-webservice ... thingie!
- November 24th, 2017: Friday's #haskell problem: PostgreSQL database, JSON, Haskell: you've got yourself a webservice. Friday's #haskell solution uses the Brief-structure, this time to show article recommendations.
- November 23rd, 2017: For Thursday, a fun little #haskell JSON-y exercise on Thanksgiving Day from the USA to you! Y'know, Nietzsche says: "Out of chaos comes JSON." ... no ... wait.
- November 22nd, 2017: Wednesday's #haskell problem: given a NYT article index, extract the article full text from PostgreSQL. Simple, eh? ... 'maybe.' Full text of NYT articles archived in PostgreSQL as JSON.
- November 21st, 2017: Tuesday's #haskell problem we slim down the article JSON returned from yesterday by providing article briefs. Today's #haskell solution goes from a set of recommendations from NYT articles to briefs.
- November 20th, 2017: Monday's #haskell problem moves keyword/key-phrase-article retrieval and matching to the PostgreSQL database. Today's #haskell solution: we build our keyword-key-phrase dictionary from SQL and filter articles indexing from those keywords.
- November 17th, 2017: Thursday we linked keywords to key-phrases; for Friday's #haskell problem, we'll upload that linkage information to a PostgreSQL data store. Today's #haskell solution stores 26,000+ keywords, with almost 240,000 cross-references into nearly 10,000 NYT articles. Whoa.
- November 16th, 2017: Thursday's #haskell problem: provide a mapping from unique keywords to key-phrases containing them. Mapping keywords to key-phrases, it's what we do for today's #haskell solution.
- November 15th, 2017: Wednesday's #haskell problem is to parse a CSV file of articles to upload to an article MongoDB. Today's #haskell solution has a little bit of CSVing and a little bit of JSONification to upload article information into MongoDB.
- November 14th, 2017: Tuesday's #haskell exercise is a parsing exercise of a different sort: parsing CSV, but with embedded quote within columns! Ooh! We now can parse CSV files with embedded quotes. YES! Adding that to the old CSV parsing library.
- November 13th, 2017: Indexing articles by keyword and then searching articles by keyword for Monday's #haskell problem. For today's #haskell solution we intersect sets of articles to do fast keyword searches.
- November 10th, 2017: Friday's #haskell exercise is to load the keywords and recommended articles into the PostgreSQL database. Thanks to today's #haskell solution we have articles and keyphrases indexed by keyword.
- November 9th, 2017: Thursday's #haskell problem ties NYT article data stored in PostgreSQL together with the recommended articles from JSON. Today's #haskell solution is reading NYT article recommendations from a PostgreSQL database.
- November 8th, 2017: Wednesday's #haskell problem is to combine article recommendations with their key-phrases to output as JSON. Wednesday's #haskell solution: JSON: GET. (p.s. I love Data.Aeson.Encode.Pretty)
- November 7th, 2017: Tuesday's #haskell problem is to parse JSON of NYT articles and their metadata. Today's #haskell solution: we have articles stored as JSON, and, voilà! we materialize those articles!
- November 6th, 2017: Monday's #haskell exercise is to parse a CSV file of recommended articles from the NYT archive. Today's #haskell solution uses the reads-function to guide the parsing of values from a CSV file.
- November 3rd, 2017: Today is Friday! YAY! Do you know what that means? It's PARSING DAY is #haskell-land! YAY! ... no ... wait. What? TIL that parsing keywords and parsing LISTS of keywords can be very different things for today's #haskell solution.
- November 2nd, 2017: Today's #haskell problem: 'Hello, world' in Haskell. Snark on the side FO' FREE! I don't recall Eliza being this snarky, but today's #haskell solution says differently.
- November 1st, 2017: Wednesday #haskell problem is scan a new archive and update the special character file or correct the new archive. The #haskell solution to replacing special characters... WHAT special characters? They GONE! #ETL
Saturday, November 4, 2017
October 2017 1Liner 1HaskellADay problems and solutions
- October 20th, 2017:
You have a list of numbers: [1,2,3,4]
You have a list of the same length of number fns: [succ, id, id, succ]
You want: [2,2,3,5] - 🇪🇺 Cλément D 🌈 🐇 @clementd zipWith (flip ($)) ?
- he adds: `zipWith (flip id)` is a bit shorter tho
- Simon Courtenage @SCourtenage zipWith ($) [succ,id,id,succ] [1,2,3,4]
- lukasz @lukaszklekot getZipList $ ZipList [succ, id, id, succ] <*> ZipList [1, 2, 3, 4]
- Alexey Radkov @sheshanaag (map (uncurry ($)) .) . zip
- October 5th, 2017: "reverse the sequencing"
You have [[(1,2),(1,3),(1,7)],[(9,2)],[(11,3)]]
You want [(1,[2,3,7]),(9,[2]),(11,[3])] - bazzargh @bazzargh map ((,) <$> head.(map fst) <*> (map snd))
- bazzargh @bazzargh map ((first head).unzip)
- Chris Martin @chris__martin \x -> [(a, b : fmap snd xs) | Just ((a, b) :| xs) <- fmap="" li="" nonempty="" x="">->
- Simon Courtenage @SCourtenage fmap (\x -> (fst . head $ x, fmap snd x))
- Denis Stoyanov 🐜 @xgrommx Your solution nice) but u can do it with point free style like
- fmap(fst.head &&& fmap snd)
- Denis Stoyanov 🐜 @xgrommx My solution is ugly, but I wanna to solve it with traverse)
- fmap(first head . traverse (first (:[])))
- Andreas Källberg @Anka213 map$fst.head&&&map snd
- Scott Fleischma @scottfleischman
traverse
$ _1
(\case
[y] -> Just y
_ -> Nothing
. nub
)
. unzip
:: [[(Int, Int)]] -> Maybe [(Int, [Int])] - Scott Fleischman @scottfleischman
let
sing [] = Left "Too few" - matt @themattchan map ((head *** id ) . unzip)
- October 3rd, 2017:
you have [(1,[2,3,4]),(10,[5,6,7])]
you want [(1,2),(1,3),(1,4),(10,5),(10,6),(10,7)]
or, generally: [(a,[b])] -> [(a,b)]
Go! - bazzargh @bazzargh (uncurry (zip . repeat) =<<)
- Bruno @Brun0Cad (=<<) sequence
- Denis Stoyanov 🐜 @xgrommx fmap (uncurry (liftA2(,) . (:[])))
- Darren G @Kludgy I like that this doesn't unnecessarily implicate the sequentiality of bind.
- Darren G @Kludgy Funny this same product came up at work last week.
concatMap $ \(a,bs) -> fmap (\b -> (a,b)) bs
sing [x] = Right x
sing (_ : _) = Left "Too many"
valid = sing . nub
go = _1 valid . unzip
in traverse go
Tuesday, October 31, 2017
October 2017 1HaskellADay problems and solutions
- October 31st, 2017: Tuesday's #haskell problem has you save off the special characters from yesterday's exercise to a properties file. Today's #haskell solution: properties file created. We also output the special characters in context, which is nice.
- October 30th, 2017: Monday's #haskell problem we contextually find special characters in documents. Whoa! Today's #haskell solution finds that there are a lot of special characters in these documents!
- October 27th, 2017: 2017-10-27, a date where the month/day is an anagram of the year. How many days from today are anagrams of 2017? What are they? Today's #haskell solution: and we have a winner! A bunch of winners, actually for date anagrams in 2017.
- October 26th, 2017: Today's #haskell problem does what Google calls artificial-artificial intelligence analyses on NYT article archives. Today's #haskell solution: from one spreadsheet comes many! Nietzsche would be so proud of me rn.
- October 25th, 2017: Today's #haskell problem, instead of counting articles by topic, we divide articles into browsable/graphable topics. Today's #haskell solution we graph a slice of our NYT article archive.
- October 24th, 2017: Tuesday's #haskell exercise we read back in the articles stored as JSON then partition them by subcategory. Okay! Partitioned articles for today's #haskell solution.
- October 23th, 2017: Monday's #haskell problem we start to analyze our NYT article archive, selecting a topic to dissect. In the #haskell solution we read articles from our data store, then we save them out to file as JSON.
- October 20th, 2017: Today's #haskell problem: NYT article archive through a different lens, as nodes and relations in a graph database. Today's #haskell solution: we wanted #graph we got graph.
- October 19th, 2017: Customer: "Ooh! We love the charts you're making for us, but..." TIL that customers have big 'but's. Today's #haskell solution: And now we can read .gitignore-style configuration files.
- October 18th, 2017: Today's #haskell problem we archive the topics (and article topicality) of the NYT article set. We group data; we regroup data. Ah! The life of a Data Scientist! Today's #haskell solution via @d3js_org #dataviz
- October 17th, 2017: Today's #haskell problem: we build an app that queries the database and generates circle reports. A bit of database work then a bit of JSON to get us our charting tool for today's #haskell solution.
- October 16th, 2017: Thanks to @ahnqir we're looking at cities and skyscrapersfor today's #haskell problem. Ooh! Bar chart! Today's #haskell solution exclaims (proclaims? declaims?) "Look at Hong Kong with its highrises!"
- October 13th, 2017: Yesterday we built a little app (scanner), today we build something a little bigger: a #haskell #ETL application! Today we pull together NYT article parsing and database functions to create a #haskell ETL app! YAY!
- October 12th, 2017: Thursday's #haskell exercise is to build an app named scanner. I, for one, welcome our scanner overlords. Today's #haskell solution is the little scanner app that could!
- October 11th, 2017: Wednesday's #haskell problem: TIL that not all data in production is pristine. SHOCKER! So, okay, we know which document we are in when the less-than-pristine data fandangos on our perfect parser. Good.
- October 10th, 2017:
Boss: "That's a good chart, but can I have it in a spreadsheet?"
me: "But ..."
Boss: "Now."
Today's #haskell solution:
me: Ya wanna spreadsheet, boss? HERE'S YER SPREADSHEET! YA HAPPY?
Boss: um, ... 'yes'? - October 9th, 2017: Today's #haskell problem asks: can we chart just a few of the topics of the week archive of the NYT? Sure we can! Today's #haskell solution provides the top 5 topics then all topics with 10 or more articles.
- October 5th, 2017: Friday's #haskell exercise works with data-as-JSON and charting the analyses on the data. Today's #haskell solution has a LOT of circles in its visualization of NYT article topics. A LOT.
- October 4th, 2017: Today's #haskell exercise uses the NYT archive we've stored to look at trending topics and to visualize them. Today's #haskell solution we grab and group data we have in a data store.
- October 3rd, 2017: Building a set of words you key off of in your search for articles? MemoizingTable is today's #haskell problem. We parse a sliced of the NYT article archive and store articles and their respective subjects.
- October 2nd, 2017: Monday's #haskell problem looks at representing SQL join- or pivot-tables generally. Today's solution uses the Pivot values in #haskell to store data on a remote PostgreSQL database.
Tuesday, October 3, 2017
September 2017 1HaskellADay 1Liner problems and solutions
- September 26th, 2017:
art2RawNames art = Raw (artId art) <$> (Map.lookup "Person" $ metadata art)
curry away the 'art' var. ref: Y2017.M09.D26.Exercise - September 19th, 2017: The #1Liner to follow (next tweet) is a question based off a code snippet from Y2017.M09.D18.Solution. What is a better/more elegant definition?
fmap (wordStrength . wc) (BL.readFile filename) >>= \dict ->
Reformulate. Curry the dict-ref.
return (Map.insert filename dict m)
Saturday, September 30, 2017
September 2017 1HaskellADay problems and solutions
- September 29th, 2017: Friday's #haskell problem uses name-parsing to post parsed names into PostgreSQL database and join them to articles. Today's #haskell solution extracts rows of raw names associated with articles, parses then stores them in PostgreSQL.
- September 28th, 2017: Thursday's #haskell problem inserts reified articles into PostgreSQL database, including names, and throws confetti! Today's #haskell solution inserts the articles from our compressed archive. YAY! Throw confetti!
- September 27th, 2017: Wednesday's #haskell problem looks at parsing names in various formats. Today's #haskell solution solves the name-parsing problem by parsing each name-form in turn.
- September 26th, 2017: Tuesday's #haskell problem looks at staging data on PostgreSQL for deferred processing using Haskell for ETL. Today's #haskell solution transforms RawNames to JSON and uploads it to a staging table on the PostgreSQL database.
- September 25th, 2017: Friday we took a compressed archive and broke that into individual articles. Today we divide articles into sections. Today's #haskell solution uncovers structure bit by bit as we reify an article structure from a block of text.
- September 22nd, 2017: Today's #haskell problem we're going to scan into an 'unstructured' set of documents and start to look for structure. Welp, today's #haskell solution is a 'start': from one blob to 11 blocks of raw text. We'll dig in deeper next week.
- September 21st, 2017: TOMORROW's #haskell problem (announced a wee bit early) queries PostgreSQL database to fetch keyword dictionary state. Today's #haskell solution picks up where we left off yesterday then computes the top keywords across articles.
- September 20th, 2017: Today's #haskell problem asks to push keywords extracted from article onto a PostgreSQL data table. Today's #haskell solution pushes keywords – PUSHES KEYWORDS REAL GOOD – to a PostgreSQL database.
- September 19th, 2017: So we've encoded keywords into Ints, today's #haskell problem decodes those ints back to the keywords. Today's #haskell solution 'reverses the arrows' of the Map, decoding a keyword from an index
- September 18th, 2017: Today's #haskell problem computes the relative word 'strength' of each word in a document. Today's #haskell solution breaks the word-strength problem into small pieces then foldM's over the small pieces.
- September 15th, 2017: Today's #haskell problem takes a look at KEA/Keyword Extraction Algorithm. Ooh, doggies! State IO Map KeyWord something-or-otherfor today's #haskell solution.
- September 14th, 2017: Today's #haskell problem involves using the simple interface to PostgreSQL to insert rows of data. Ooh! Exciting! Today's #haskell solution uses ToRow and ToField to insert Haskell values into #PostgreSQL #DaaS instance! lolneat!
- September 13th, 2017: Today's #haskell problem asks the article names have encoded Julian dates ... OR DO THEY? So, in solving today's #haskell problem, I realized THOSE AREN'T JULIAN DATES! THOSE ARE DATE DATES!
- September 8th, 2017: Continuing our ETL exploration with a load/compress/storefor today's #haskell exercise. Today's #haskell solution shows load/compress/store ... that's a word now.
- September 5th, 2017: Today's #haskell exercise is to build a directory web serviceusing the Snap framework [or a framework you prefer]
- September 4th, 2017: Today's #haskell problem reads in source documents and does some word frequency analyses. Today's #haskell solution shows, surprisingly, 'the' is the most popular English word. Or, not so surprisingly.
- September 1st, 2017: Today's #haskell problem #SPARQL-queries wikidata.org to fetch countries' populations for FB analysis. Yesterday, India won FB by population, today we have a surprise winner in Thailand for FB by percentage user base.
Tuesday, September 19, 2017
August 2017 1HaskellADay 1Liners Problems and Solutions
- August 1st, 2017: f :: (Maybe a, b) -> Maybe (a, b) Define points-free.
- August 1st, 2017:
Given f above and f a and f b are mutually exclusive in Maybe monad, define
g :: Maybe (a, b) -> Maybe (a, b) -> (Maybe a, b)
points free - August 1st, 2017:
Now, let's define the dual of f
f' :: Maybe (a, b) -> (Maybe a, b)
points free
Friday, September 1, 2017
August 2017 1HaskellADay problems and solutions
- August 31st, 2017: Today's #haskell exercise is by way of @ahnqir. What are the percentage of facebook users by country? Today's #haskell solution charts FB users by country. GO INDIA!
- August 4th, 2017: For today's #haskell problem we are looking at the caesar cipher as a better rot13. And today's #haskell solution with rot, rot, roslein rot everywhere.
- August 1st, 2017: For today's #haskell problem we are parsing a string into word-tokens and munging/demunging them with rot13! WOOT! Munging plaintext and demunging cyphertext, oh, my!
Tuesday, August 1, 2017
July 2017 1HaskellADay 1Liner
- July 7th, 2017:
In LU-decomposition of matrices you have square P-matrix:
[[1,0..],
[0,2,0..],
[0,0,3,0..],
...]
For matrices of n² size
Code that- ∃! David Turner @DaveCTurner
- matrix n = let td = take n . drop 1 in td [td $ replicate i 0 ++ [i] ++ repeat 0 | i <- [0..]]
Monday, July 31, 2017
July 2017 1HaskellADay Problems and Solutions
- July 26th, 2017: We look at unifying fresh variables to ground terms for today's #haskell problem. And we have unification working for free variables and ground terms for today's #haskell solution.
- July 25th, 2017: We look at the beginnings of unification with ground terms for today's #haskell problem. Today's #haskell solution shows unification of ground terms in a monadic domain.
- July 24th, 2017: Commuters today occupy my mind for today's #haskell problem. A little reasoning, a little harsh reality, and we have today's #haskell solution.
- July 20th, 2017: I didn't go for my morning jog, so today's #haskell problem looks at running ... expressions. Eheh. For today's #haskell solution, some people run on empty, but I run on LOGIC! ... same thing.
- July 19th, 2017: Today's #haskell problem is our first step in our scheme to reasoning! MWA-HAHA! via the Reasoned Schemer. Today's #haskell solution:some days are #s; some days are #u
- July 7th, 2017: It's FRIDAY, and you know what that means? SCRABBLE DAY! for today's #haskell problem
- July 6th, 2017: For today's #haskell problem we invert a matrix to solve a system of equations.
- July 5th, 2017: For today's #haskell problem we have a * b = c ... HOW HARD CAN THAT BE? #famouslastwords The #haskell solution took like a whole second! THAT WAS HARD!
- July 4th, 2017: Boys and girls! Gather 'round as I spin you a story of Jemima and Roland for today's #haskell problem.
- July 3rd, 2017: Today's #haskell problem is all 'bout the Ord, 'bout the Ord, 'bout the Ord. No Functor. Today's #haskell solution uses a little sorting logic (not sordid logic; that's different) to show Jim is the eldest.
Friday, July 7, 2017
June 2017 1HaskellADay 1Liners
- June 17th, 2017:
f :: (a, [a]) -> [a] -> [a]
f (c, w1) w2 = c:w1 ++ w2
Define f points-free - bazzargh @bazzargh (++).uncurry(:)
- Felt there must be a nicer way to exploit symmetry of mappend.uncurry(mappend.pure) but can't find it
Monday, July 3, 2017
June 2017 1HaskellADay Problems and Solutions
- June 21st, 2017: Today's #haskell problem connects to and queries a SQL database of your choosing.
- June 16th, 2017: Today's #haskell problem has us interacting with the OS environment in anticipation of SQL database queries. Today's #haskell solution uses Applicative Functors to string together values we collect from the OS environment.
- June 15th, 2017: Today's Haskell problem comes by way of @aisamanra, Mr. Lists-are-Mu-functions-in-the-function-of-Mus. Today's #haskell solution shows Lists are Mu-functors! ... now, making them instances of type-classes, however ...
- June 14th, 2017: Today's #haskell problem is brought by way of @matthieubulte: approximating solutions with Runge-Kutta. The #haskell solution shows I can (ψ, ε, k) with the best of them! AHA! ... but is it the CORRECT solution? 🙄
- June 6th, 2017: In today's #haskell problem, we go clockwise around a binary tree, because ... we've had one too many?
Friday, June 16, 2017
May 2017 1Liners 1HaskellADay
- May 10th, 2017:
Define (^) :: (a -> a) -> Int -> (a -> a)
The 'power'-function where f ^ 3 = f . f . f - Conor McBride @pigworker flip ((ala Endo foldMap .) . replicate)
Wednesday, June 7, 2017
May 2017 1HaskellADay problems and solutions
- May 25th, 2017: Today's #haskell problem looks at the interconnectedness of languages as a graph.
- May 24th, 2017: Today's #haskell problem continues the exploration of spoken language roots catalogued in @wikidata. We present the first half of the #haskell solution that allows us to parse @wikidata results with optional values.
- May 23rd, 2017: I preface today's #haskell problem with a discussion on dirty/muddled data in @wikidata then continue onto languages. Today's #haskell solution shows us, e.g.: Cornish, Welsh and Breton are in the Brythonic language family. @wikidata
- May 22nd, 2017: Today's #haskell problem looks at spoken languages catalogued in @wikidata. Today's #haskell solution shows us @wikidata has NOTHING for the count of ENGLISH-speakers! #strangebuttrue
- May 17th, 2017: The NSA called. They are wanting the solution to today's #haskell Pentagon-number problem. Now.
- May 16th, 2017: Today's #haskell problem ... and Madonna! ... want you to justify my num! We find out that ALL YOUR BASE ARE BELONG TO US in today's #haskell solution
- May 15th, 2017: Today's #haskell problem warns us: "ACHTUNG, LOOKENPEEPERS! ZO RELAXEN UND WATSCHEN DER BLINKENLICHTEN." Today's #haskell solution taught me SO MUCH German. I mean SO MUCH!
- May 10th, 2017: For today's #haskell problem: when doing egg-arithmetic, we do not things by halves! ... or, perhaps, we do! Today's #haskell solution is EGGS! EGGS AS A POWER FUNCTION! EGGS EVERYWHERE!
- May 8th, 2017: Today's #haskell problem puts us 🎶 "Back on the Hang Gangs!" 🎶 Today's #haskell solution: "We must, indeed, all hang together or, most assuredly, we shall all hang separately."
- May 5th, 2017: HAPPY #CincodeMayo ... BUT ON A TUESDAY?!? What year was that, then? Today's #haskell problem. Today's #haskell solution shows Cinco de Mayo happens EVERY YEAR?!? Who da thunk it?
- May 3rd, 2017: Today's #haskell problem: April, May, and June are three sisters, and you have to find their ages. ... #awkward. Today's #haskell solution we have the old 1, 2, 3 sisters. Not that I'm saying these sisters are old. Not me. Nope.
- May 2nd, 2017: Ah! May! When Spring is in the Air! And #haskell-ers thoughts turn to Love* *solving today's problem. Today's #haskell solution presents a conundrum: Is the solution "spring" or "spring"? Hm. Tough call!
- May 1st, 2017: Happy May Day, #haskell-ers! Today we combat the academic illness: dafundzarlow ... let that sink in. Today we see two solutions to the #haskell problem of budgeting for cake and candy at Maura's school party. And to those of you who think #haskell has no practical application? Pooh on you! BUDGETING CAKE AND CANDY AT PARTIES IS TRÈS PRACTICAL! 😡
Subscribe to:
Posts (Atom)