module EunminKim where

-- | 김은민 (Eunmin Kim)
-- | Seoul, South Korea
-- | Constacts, Inc. @ arota.ai

import Clojure
import Scala
import Kotlin
import Elm
import Haskell
import Guitar    -- 🎸
import HighFive  -- ✋

-- | 나는 누구인가?
data Developer = Developer
  { name     :: String
  , location :: String
  , company  :: String
  , loves    :: [Language]
  }

me :: Developer
me = Developer
  { name     = "김은민"
  , location = "Seoul"
  , company  = "Constacts, Inc."
  , loves    = [Clojure, Scala, Kotlin, Elm, Haskell]
  }

-- | 함수형 프로그래밍을 사랑합니다
class FunctionalProgrammer a where
  writesPureCode    :: a -> Bool
  avoidsStateMutate :: a -> Bool
  thinkInMonads     :: a -> IO Enlightenment

instance FunctionalProgrammer Developer where
  writesPureCode _    = True
  avoidsStateMutate _ = True
  thinkInMonads dev   = do
    study "getting-started-monad"  -- ⭐ 41
    practice "realworld-haskell"   -- ⭐ 37
    create "plet"                  -- ⭐ 22
    return Enlightenment

-- | 오픈소스 기여
data GitHubStats = GitHubStats
  { repositories :: Int
  , followers    :: Int
  , stars        :: Int
  }

myGitHub :: GitHubStats
myGitHub = GitHubStats
  { repositories = 302
  , followers    = 124
  , stars        = 345
  }

-- | 업적
achievements :: [String]
achievements =
  [ "Arctic Code Vault Contributor"
  , "Starstruck"
  , "Pull Shark x2"
  ]

-- | main = 커피 >> 코딩 >> repeat
main :: IO ()
main = forever $ do
  drink Coffee
  write FunctionalCode
  contribute OpenSource
  playGuitar
  spreadKnowledge