{-# LANGUAGE CPP #-}
{-# LANGUAGE NoImplicitPrelude #-}
{-# LANGUAGE OverloadedStrings #-}
module Text.Emoji ( emojis, emojiFromAlias, aliasesFromEmoji ) where
import Prelude
import qualified Data.Map as M
import Data.Text (Text)
emojiMap :: M.Map Text Text
emojiMap :: Map Text Text
emojiMap = [(Text, Text)] -> Map Text Text
forall k a. Ord k => [(k, a)] -> Map k a
M.fromList [(Text, Text)]
emojis
emojiAliasMap :: M.Map Text [Text]
emojiAliasMap :: Map Text [Text]
emojiAliasMap =
((Text, Text) -> Map Text [Text] -> Map Text [Text])
-> Map Text [Text] -> [(Text, Text)] -> Map Text [Text]
forall (t :: * -> *) a b.
Foldable t =>
(a -> b -> b) -> b -> t a -> b
foldr (\(Text
alias, Text
s) Map Text [Text]
m -> (Maybe [Text] -> Maybe [Text])
-> Text -> Map Text [Text] -> Map Text [Text]
forall k a.
Ord k =>
(Maybe a -> Maybe a) -> k -> Map k a -> Map k a
M.alter (Text -> Maybe [Text] -> Maybe [Text]
forall a. a -> Maybe [a] -> Maybe [a]
go Text
alias) Text
s Map Text [Text]
m) Map Text [Text]
forall a. Monoid a => a
mempty [(Text, Text)]
emojis
where
go :: a -> Maybe [a] -> Maybe [a]
go a
alias Maybe [a]
Nothing = [a] -> Maybe [a]
forall a. a -> Maybe a
Just [a
alias]
go a
alias (Just [a]
as) = [a] -> Maybe [a]
forall a. a -> Maybe a
Just (a
aliasa -> [a] -> [a]
forall a. a -> [a] -> [a]
:[a]
as)
emojiFromAlias :: Text -> Maybe Text
emojiFromAlias :: Text -> Maybe Text
emojiFromAlias Text
name = Text -> Map Text Text -> Maybe Text
forall k a. Ord k => k -> Map k a -> Maybe a
M.lookup Text
name Map Text Text
emojiMap
aliasesFromEmoji :: Text -> Maybe [Text]
aliasesFromEmoji :: Text -> Maybe [Text]
aliasesFromEmoji Text
s = Text -> Map Text [Text] -> Maybe [Text]
forall k a. Ord k => k -> Map k a -> Maybe a
M.lookup Text
s Map Text [Text]
emojiAliasMap
emojis :: [(Text, Text)]
#include "emojis.inc"