Last active
March 3, 2019 15:45
-
-
Save lagenorhynque/3cee0980d52cb2f1037d24815482d7bf to your computer and use it in GitHub Desktop.
Simple "user" modelling examples in Clojure, Haskell & Scala.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
(ns model | |
(:require [clojure.spec.alpha :as s])) | |
(s/def :user/first-name string?) | |
(s/def :user/last-name string?) | |
(s/def :user/full-name string?) | |
(s/def ::user (s/keys :req [:user/first-name | |
:user/last-name])) | |
(s/fdef full-name | |
:args (s/cat :user ::user) | |
:ret :user/full-name) | |
(defn full-name [{:user/keys [first-name last-name]}] | |
(str first-name " " last-name)) | |
(defn -main [& args] | |
(let [u #:user{:first-name "You" | |
:last-name "Watanabe"}] | |
(println (str "user: " u)) | |
(println (str "user's full name: " (full-name u))))) |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{-# LANGUAGE NamedFieldPuns #-} | |
module Model where | |
data User = User { firstName :: !String | |
, lastName :: !String | |
} | |
deriving Show | |
fullName :: User -> String | |
fullName User{firstName, lastName} = firstName ++ " " ++ lastName | |
main :: IO () | |
main = do | |
let u = User { firstName = "You", lastName = "Watanabe"} | |
putStrLn $ "user: " ++ show u | |
putStrLn $ "user's full name: " ++ fullName u |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
case class User(firstName: String, lastName: String) { | |
val fullName = s"$firstName $lastName" | |
} | |
object Model extends App { | |
val u = User(firstName = "You", lastName = "Watanabe") | |
println(s"user: $u") | |
println(s"user's full name: ${u.fullName}") | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Execution results: