git.iko.soy/rowtype-yoga/purescript-native
on 7db07cc help sign in
39 lines 875 B history raw
1module Main where
3import Prelude
4import Control.Monad.Eff
5import Control.Monad.Eff.Console
7class Newtype t a | t -> a where
8 wrap :: a -> t
9 unwrap :: t -> a
11instance newtypeMultiplicative :: Newtype (Multiplicative a) a where
12 wrap = Multiplicative
13 unwrap (Multiplicative a) = a
15data Multiplicative a = Multiplicative a
17instance semiringMultiplicative :: Semiring a => Semigroup (Multiplicative a) where
18 append (Multiplicative a) (Multiplicative b) = Multiplicative (a * b)
20data Pair a = Pair a a
22foldPair :: forall a s. Semigroup s => (a -> s) -> Pair a -> s
23foldPair f (Pair a b) = f a <> f b
25ala
26 :: forall f t a
27 . (Functor f, Newtype t a)
28 => (a -> t)
29 -> ((a -> t) -> f t)
30 -> f a
31ala _ f = map unwrap (f wrap)
33test = ala Multiplicative foldPair
35test1 = ala Multiplicative foldPair (Pair 2 3)
37main = do
38 logShow (test (Pair 2 3))
39 log "Done"