Newtype型クラス
構えるほど難しくはない

例を眺めればなんとなくわかる
purs(hs)module Newtype where
import Data.Newtype
import Prelude
import Data.Generic.Rep (class Generic)
import Data.Lens.Iso.Newtype (_Newtype)
import Data.Show.Generic (genericShow)
import Data.String (toUpper)
import Effect.Class.Console (log)
newtype Username = Username String
derive instance Newtype Username _
instance Show Username where
show (Username user) = "Username " <> user
user1 :: Username
user1 = Username "mrsekut"
-- > unwrap user1
-- "mrsekut"
-- > wrap "mrsekut" :: Username
-- Username "mrsekut"
例があれなので、Number系の例に書き換えよう

purs(hs)unwrap <<< wrap = id
wrap <<< unwrap = id
k
over
Functorにおけるmapと同じ
purs(hs)upper :: Username -> Username
upper = over Username toUpper
-- > upper $ Username "mrsekut"
-- Username "MRSEKUT"
over2
2引数版
purs(hs)concat :: Username -> Username -> Username
concat = over2 Username (<>)
-- > concat (Username "mrse") (Username "kut")
-- Username mrsekut
overF
liftしたmap
purs(hs)byDomain :: String -> Array Username -> Maybe Username
byDomain = overF Username <<< find <<< contains <<< wrap
-- > byDomain "aaa" [Username "bb", Username "aaa"]
-- (Just Username aaa)
もうちょい見る

overF2
under
under2
underF
underF2
op
ala
与えられたnewtypeのコンテキストで、その関数を適用する
purs(hs)ala Additive foldMap [1,2,3,4] -- 10
ala Multiplicative foldMap [1,2,3,4] -- 24
ala Conj foldMap [true, false] -- false
ala Disj foldMap [true, false] -- true
Additive
としてfoldMapを適用する
ala'
alaF
purs(hs)ccc = alaF Additive foldMap String.length ["hello", "world"] -- 10
これ、docsに書いている例だが、型エラーになる
