## Tuesday, August 1, 2017

• 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..]]

## Friday, July 7, 2017

• 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

## Friday, June 16, 2017

• 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, May 10, 2017

• April 14th, 2017: given
eitherOr, neitherNor :: Eq a => a -> a -> a -> Bool

Is eitherOr not neitherNor?

Prove or disprove.
• April 14th, 2017: given
neitherNor :: Eq a => a -> a -> a -> Bool
andNot :: Eq a => a -> a -> Bool

How do you compose neitherNor 1 0 and andNot 4?
• April 11th, 2017:

opts :: Credentials -> Options
opts c = defaults & auth ?~ basicAuth (pack \$ keyToken c) (pack \$ secretToken c)

point-free-itize

given:

data Credentials = Credentials { keyToken, secretToken :: String }

and (?~) and (&) are from Control.Lens

Snaps for elegance

The above code from quillio/Twillo.hs by ismailmustafa

## Tuesday, April 11, 2017

• March 30th, 2017:
divide :: (a -> Either b c) -> [a] -> ([b], [c])  This function is somewhere easy to get to, right?
via @fmapE
• @fmapE: divide f = foldr (either (first . (:)) (second . (:)) . f) ([], [])
• SocialJusticeCleric @walkstherain divide f = Data.Either.partitionEithers . fmap f
• andrus @andrus divide f = foldMap \$ (swap . pure . pure ||| pure . pure) . f
• matt @themattchan divide = partitionEithers ... map where ... = (.).(.)
• March 13th, 2017:
Palindromes have nothing to do with today's #haskell problem of anagrams. So what.

Define
palindrome :: String -> Bool
elegantly
• SocialJusticeCleric @walkstherain all id . (zipWith (==) =<< reverse)
• bazzargh @bazzargh ap (==) reverse?
• March 13th, 2017:
type Bag a = Map a Int

anagram :: Ord a => [a] -> [a] -> Bool
anagram src = (== Bag.fromList src) . Bag.fromList

Redefine with <*>
• Denis Stoyanov @xgrommx why not?
anagram = (==) `on` Bag.fromList

## Monday, March 13, 2017

• January 31st, 2017:
You have d = "3.461497957769017000D+07"
define parseDouble :: String -> Double
(n.b.: (read d) :: Double throws an error)
• January 31st, 2017: Given
e :: FilePath -> [String] -> [Epoch]

readEpochs :: FilePath -> IO [Epoch]

• Astynax Pirogov @alex_pir uncurry fmap . (((. lines) . e) &&& readFile
• January 30th, 2017: Given

parseNum :: String -> Maybe (Float, String)

define: dropNum'' :: String -> Maybe String

points-free in terms of parseNum
• matt @themattchan dropNum" = fmap snd . parseNum
• January 30th, 2017: For

parseHeader :: String -> Maybe String
parseHeader str = match "Start " str <|> match "Finish " str

eliminate redundancies
• mconcat . ([match] <*> ["Start ", "Finish "] <*>) . pure
foldMap match ["Start", "Finish"]
• Andreas Källberg @Anka213  My solution was
parseHeader str = foldr1 (<|>) . map (`match` str) \$ ["Start", "Finish"]
But that's longer than the original.
• January 25th, 2017:
given f is type: f :: Int -> a -> Bool

for: g :: a -> Bool
g = (||) . f 2 <*> f 27

rewrite g using f only once in the definition
• Denis Stoyanov @xgrommx ugly version but
(liftA2 . liftA2) (||) (\$2) (\$27) f
• January 19th, 2017:
import Data.Tree.Merkle

mkleaf :: Show a => a -> Leaf a
mkleaf = uncurry Leaf . (show . hashDatum &&& id)

redefine using (<*>)
• Denis Stoyanov @xgrommx smth like
mkleaf = uncurry Leaf . show . (hashDatum <\$> (,) <*> id)
mkleaf = uncurry Leaf . show . (liftA2 (,) hashDatum id)
• January 19th, 2017:
mkbranch1 :: Leaf a -> Branch a
mkbranch1 = uncurry Twig . (uncurry childrenHash . (dataHash &&& dataHash) &&& id)

redefine using (<*>)s(?)

## Thursday, January 19, 2017

• December 22nd, 2016:  f :: (Either a b, c) -> Either (a, c) (b, c), define f, snaps for elegance, e.g.: f (Left 4, "Hi") = Left (4, "Hi")
• bazzargh @bazzargh uncurry (flip (join bimap . (,) ))
• Denis Stoyanov @xgrommx need (Left 4, "Hi") = Left (4, "Hi") but your version Left ("Hi", 4)
• Thomas D @tthomasdd Do tuple sections count? do I have access to Data.Bifunctor?
• f (eab,c) = bimap (,c) (,c) eab
• SocialJusticeCleric @walkstherain uncurry \$ either ((Left .).(,)) ((Right .).(,))
• Denis Stoyanov @xgrommx or f (e, a) = (join bimap (\x -> (x, a))) e
• Nickolay Kudasov @crazy_fizruk most elegant IMO:
f (Left a, c) = Left (a, c)
f (Right b, c) = Right (b, c)
• December 22nd, 2016: define a function that writes out an infinite, alternating stream of 1's and 0's as below.
• Philipp Maier @AkiiZedd mapM putStrLn \$ join \$ repeat ["0","1"]
• Eyal Lotem @EyalL join . repeat = cycle?
• mavant @mavant f = putStr "10" >> f
• Eyal Lotem @EyalL mapM putStrLn \$ cycle ["0","1"]
• December 10th, 2016:
startsWith :: [String] -> String
points-free so that:
startsWith ["ΜΗΛΟΝ", "ΗΔΟΝΗ"] = "ΛΟ"
That is: (length list)+1 Char of each word
• SocialJusticeCleric @walkstherain
• I prefer `uncurry (!!) . (Data.List.transpose &&& length)`
• but `map . flip (!!) . length =<< id` only uses the Prelude
• Nick @crazy_fizruk zipWith (!!) <*> repeat . length