{-# LANGUAGE NoMonomorphismRestriction #-}
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE TypeFamilies #-}
{-# OPTIONS_GHC -fno-warn-missing-signatures #-}

-----------------------------------------------------------------------------
-- |
-- Module      :  Diagrams.Example.Logo
-- Copyright   :  (c) 2011 Brent Yorgey
-- License     :  BSD-style (see LICENSE)
-- Maintainer  :  byorgey@cis.upenn.edu
--
-- Source code for creating the diagrams logo.
--
-- <<diagrams/src_Diagrams_Example_Logo_diaLogo.svg#diagram=diaLogo&height=100>>
--
-----------------------------------------------------------------------------
module Diagrams.Example.Logo where

-- > import Diagrams.Example.Logo
-- > diaLogo = logo

import           Diagrams.Prelude

import           Diagrams.TwoD.Layout.Tree
import           Diagrams.TwoD.Path.Turtle

import           Control.Monad

------------------------------------------------------------
-- D
------------------------------------------------------------

d :: QDiagram b V2 n Any
d = (Path V2 n -> QDiagram b V2 n Any
forall n t b.
(InSpace V2 n t, ToPath t, TypeableFloat n,
 Renderable (Path V2 n) b) =>
t -> QDiagram b V2 n Any
stroke (Path V2 n -> QDiagram b V2 n Any)
-> Path V2 n -> QDiagram b V2 n Any
forall a b. (a -> b) -> a -> b
$
   n -> Path V2 n
forall t n.
(TrailLike t, V t ~ V2, N t ~ n, Transformable t) =>
n -> t
circle n
2 Path V2 n -> (Path V2 n -> Path V2 n) -> Path V2 n
forall a b. a -> (a -> b) -> b
# Path V2 n -> Path V2 n
forall n a.
(InSpace V2 n a, Fractional n, Alignable a, HasOrigin a) =>
a -> a
alignBR Path V2 n -> (Path V2 n -> Path V2 n) -> Path V2 n
forall a b. a -> (a -> b) -> b
# n -> Path V2 n -> Path V2 n
forall (v :: * -> *) n t.
(InSpace v n t, R1 v, Transformable t) =>
n -> t -> t
translateX (-n
0.5)
   Path V2 n -> Path V2 n -> Path V2 n
forall a. Semigroup a => a -> a -> a
<> (CatOpts n -> [Path V2 n] -> Path V2 n
forall n a.
(InSpace V2 n a, Floating n, Juxtaposable a, HasOrigin a,
 Monoid' a) =>
CatOpts n -> [a] -> a
hcat' (CatOpts n
forall d. Default d => d
with CatOpts n -> (CatOpts n -> CatOpts n) -> CatOpts n
forall a b. a -> (a -> b) -> b
& (n -> Identity n) -> CatOpts n -> Identity (CatOpts n)
forall n (f :: * -> *).
Functor f =>
(n -> f n) -> CatOpts n -> f (CatOpts n)
sep((n -> Identity n) -> CatOpts n -> Identity (CatOpts n))
-> n -> CatOpts n -> CatOpts n
forall s t a b. ASetter s t a b -> b -> s -> t
.~ n
0.2) ([Path V2 n] -> Path V2 n)
-> ([[Path V2 n]] -> [Path V2 n]) -> [[Path V2 n]] -> Path V2 n
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ([Path V2 n] -> Path V2 n) -> [[Path V2 n]] -> [Path V2 n]
forall a b. (a -> b) -> [a] -> [b]
map (CatOpts n -> [Path V2 n] -> Path V2 n
forall n a.
(InSpace V2 n a, Floating n, Juxtaposable a, HasOrigin a,
 Monoid' a) =>
CatOpts n -> [a] -> a
vcat' (CatOpts n
forall d. Default d => d
with CatOpts n -> (CatOpts n -> CatOpts n) -> CatOpts n
forall a b. a -> (a -> b) -> b
& (n -> Identity n) -> CatOpts n -> Identity (CatOpts n)
forall n (f :: * -> *).
Functor f =>
(n -> f n) -> CatOpts n -> f (CatOpts n)
sep ((n -> Identity n) -> CatOpts n -> Identity (CatOpts n))
-> n -> CatOpts n -> CatOpts n
forall s t a b. ASetter s t a b -> b -> s -> t
.~ n
0.2))
        ([[Path V2 n]] -> Path V2 n) -> [[Path V2 n]] -> Path V2 n
forall a b. (a -> b) -> a -> b
$ (Int -> [Path V2 n] -> [[Path V2 n]]
forall a. Int -> a -> [a]
replicate Int
2 (Int -> Path V2 n -> [Path V2 n]
forall a. Int -> a -> [a]
replicate Int
9 (Path V2 n -> Path V2 n
forall (v :: * -> *) n.
(Metric v, OrderedField n) =>
Path v n -> Path v n
reversePath (Path V2 n -> Path V2 n) -> Path V2 n -> Path V2 n
forall a b. (a -> b) -> a -> b
$ n -> Path V2 n
forall t n.
(TrailLike t, V t ~ V2, N t ~ n, Transformable t) =>
n -> t
circle n
0.3)))) Path V2 n -> (Path V2 n -> Path V2 n) -> Path V2 n
forall a b. a -> (a -> b) -> b
# Path V2 n -> Path V2 n
forall n a.
(InSpace V2 n a, Fractional n, Alignable a, HasOrigin a) =>
a -> a
alignBR)
    # fc red
    # lwG 0

-- an icon-ish version of the d

ico_d :: QDiagram b V2 n Any
ico_d = (Path V2 n -> QDiagram b V2 n Any
forall n t b.
(InSpace V2 n t, ToPath t, TypeableFloat n,
 Renderable (Path V2 n) b) =>
t -> QDiagram b V2 n Any
stroke (Path V2 n -> QDiagram b V2 n Any)
-> Path V2 n -> QDiagram b V2 n Any
forall a b. (a -> b) -> a -> b
$
        n -> Path V2 n
forall t n.
(TrailLike t, V t ~ V2, N t ~ n, Transformable t) =>
n -> t
circle n
2 Path V2 n -> (Path V2 n -> Path V2 n) -> Path V2 n
forall a b. a -> (a -> b) -> b
# Path V2 n -> Path V2 n
forall n a.
(InSpace V2 n a, Fractional n, Alignable a, HasOrigin a) =>
a -> a
alignBR Path V2 n -> (Path V2 n -> Path V2 n) -> Path V2 n
forall a b. a -> (a -> b) -> b
# n -> Path V2 n -> Path V2 n
forall (v :: * -> *) n t.
(InSpace v n t, R1 v, Transformable t) =>
n -> t -> t
translateX (-n
0.5)
        Path V2 n -> Path V2 n -> Path V2 n
forall a. Semigroup a => a -> a -> a
<> (CatOpts n -> [Path V2 n] -> Path V2 n
forall n a.
(InSpace V2 n a, Floating n, Juxtaposable a, HasOrigin a,
 Monoid' a) =>
CatOpts n -> [a] -> a
vcat' (CatOpts n
forall d. Default d => d
with CatOpts n -> (CatOpts n -> CatOpts n) -> CatOpts n
forall a b. a -> (a -> b) -> b
& (n -> Identity n) -> CatOpts n -> Identity (CatOpts n)
forall n (f :: * -> *).
Functor f =>
(n -> f n) -> CatOpts n -> f (CatOpts n)
sep((n -> Identity n) -> CatOpts n -> Identity (CatOpts n))
-> n -> CatOpts n -> CatOpts n
forall s t a b. ASetter s t a b -> b -> s -> t
.~ n
0.3) ([Path V2 n] -> Path V2 n) -> [Path V2 n] -> Path V2 n
forall a b. (a -> b) -> a -> b
$ Int -> Path V2 n -> [Path V2 n]
forall a. Int -> a -> [a]
replicate Int
5 (Path V2 n -> Path V2 n
forall (v :: * -> *) n.
(Metric v, OrderedField n) =>
Path v n -> Path v n
reversePath (Path V2 n -> Path V2 n) -> Path V2 n -> Path V2 n
forall a b. (a -> b) -> a -> b
$ n -> Path V2 n
forall t n.
(TrailLike t, V t ~ V2, N t ~ n, Transformable t) =>
n -> t
circle n
0.5)) Path V2 n -> (Path V2 n -> Path V2 n) -> Path V2 n
forall a b. a -> (a -> b) -> b
# Path V2 n -> Path V2 n
forall n a.
(InSpace V2 n a, Fractional n, Alignable a, HasOrigin a) =>
a -> a
alignBR)
        # fc red
        # lwG 0

------------------------------------------------------------
-- I
------------------------------------------------------------

i :: QDiagram b V2 n m
i = (n -> QDiagram b V2 n m
forall t n.
(TrailLike t, V t ~ V2, N t ~ n, Transformable t) =>
n -> t
circle n
1 QDiagram b V2 n m -> QDiagram b V2 n m -> QDiagram b V2 n m
forall n a.
(InSpace V2 n a, Juxtaposable a, Semigroup a) =>
a -> a -> a
=== n -> QDiagram b V2 n m
forall (v :: * -> *) n b m.
(Metric v, R2 v, OrderedField n) =>
n -> QDiagram b v n m
strutY n
0.5 QDiagram b V2 n m -> QDiagram b V2 n m -> QDiagram b V2 n m
forall n a.
(InSpace V2 n a, Juxtaposable a, Semigroup a) =>
a -> a -> a
=== n -> n -> n -> QDiagram b V2 n m
forall n t.
(InSpace V2 n t, TrailLike t, RealFloat n) =>
n -> n -> n -> t
roundedRect n
2 n
4 n
0.4)
    # lwG 0.05
    # lc blue
    # fc yellow

------------------------------------------------------------
-- A
------------------------------------------------------------

sierpinski :: t -> a
sierpinski t
1 = PolygonOpts (N a) -> a
forall n t. (InSpace V2 n t, TrailLike t) => PolygonOpts n -> t
polygon (PolygonOpts (N a)
forall d. Default d => d
with PolygonOpts (N a)
-> (PolygonOpts (N a) -> PolygonOpts (N a)) -> PolygonOpts (N a)
forall a b. a -> (a -> b) -> b
& (PolyType (N a) -> Identity (PolyType (N a)))
-> PolygonOpts (N a) -> Identity (PolygonOpts (N a))
forall n (f :: * -> *).
Functor f =>
(PolyType n -> f (PolyType n))
-> PolygonOpts n -> f (PolygonOpts n)
polyType ((PolyType (N a) -> Identity (PolyType (N a)))
 -> PolygonOpts (N a) -> Identity (PolygonOpts (N a)))
-> PolyType (N a) -> PolygonOpts (N a) -> PolygonOpts (N a)
forall s t a b. ASetter s t a b -> b -> s -> t
.~ Int -> N a -> PolyType (N a)
forall n. Int -> n -> PolyType n
PolyRegular Int
3 N a
1 )
sierpinski t
n = a
t a -> a -> a
forall n a.
(InSpace V2 n a, Juxtaposable a, Semigroup a) =>
a -> a -> a
=== (a
t a -> a -> a
forall n a.
(InSpace V2 n a, Juxtaposable a, Semigroup a) =>
a -> a -> a
||| a
t) a -> (a -> a) -> a
forall a b. a -> (a -> b) -> b
# a -> a
forall (v :: * -> *) n a.
(InSpace v n a, R1 v, Fractional n, Alignable a, HasOrigin a) =>
a -> a
centerX
  where t :: a
t = t -> a
sierpinski (t
nt -> t -> t
forall a. Num a => a -> a -> a
-t
1)

a1 :: b
a1 = Integer -> b
forall {a} {t}.
(V a ~ V2, Semigroup a, Juxtaposable a, Num t, TrailLike a,
 Alignable a, HasOrigin a, Eq t) =>
t -> a
sierpinski (Integer
4 :: Integer)
     # fc navy
     # lwG 0
     # scale (1/2)

------------------------------------------------------------
-- G
------------------------------------------------------------

grid :: a
grid = a
forall {a}.
(V a ~ V2, Monoid a, HasOrigin a, Juxtaposable a, TrailLike a) =>
a
verts a -> (a -> a) -> a
forall a b. a -> (a -> b) -> b
# a -> a
forall (v :: * -> *) n a.
(InSpace v n a, R2 v, Fractional n, Alignable a, HasOrigin a) =>
a -> a
centerXY a -> a -> a
forall a. Semigroup a => a -> a -> a
<> a
forall {t}.
(V t ~ V2, Transformable t, Monoid t, HasOrigin t, Juxtaposable t,
 TrailLike t) =>
t
horiz a -> (a -> a) -> a
forall a b. a -> (a -> b) -> b
# a -> a
forall (v :: * -> *) n a.
(InSpace v n a, R2 v, Fractional n, Alignable a, HasOrigin a) =>
a -> a
centerXY
  where verts :: a
verts = CatOpts (N a) -> [a] -> a
forall n a.
(InSpace V2 n a, Floating n, Juxtaposable a, HasOrigin a,
 Monoid' a) =>
CatOpts n -> [a] -> a
hcat' (CatOpts (N a)
forall d. Default d => d
with CatOpts (N a) -> (CatOpts (N a) -> CatOpts (N a)) -> CatOpts (N a)
forall a b. a -> (a -> b) -> b
& (N a -> Identity (N a))
-> CatOpts (N a) -> Identity (CatOpts (N a))
forall n (f :: * -> *).
Functor f =>
(n -> f n) -> CatOpts n -> f (CatOpts n)
sep((N a -> Identity (N a))
 -> CatOpts (N a) -> Identity (CatOpts (N a)))
-> N a -> CatOpts (N a) -> CatOpts (N a)
forall s t a b. ASetter s t a b -> b -> s -> t
.~N a
0.5) ([a] -> a) -> [a] -> a
forall a b. (a -> b) -> a -> b
$ Int -> a -> [a]
forall a. Int -> a -> [a]
replicate Int
20 (N a -> a
forall n t. (InSpace V2 n t, TrailLike t) => n -> t
vrule N a
10)
        horiz :: t
horiz = N t -> t -> t
forall n t.
(InSpace V2 n t, Transformable t, Floating n) =>
n -> t -> t
rotateBy (N t
1N t -> N t -> N t
forall a. Fractional a => a -> a -> a
/N t
4) t
forall {a}.
(V a ~ V2, Monoid a, HasOrigin a, Juxtaposable a, TrailLike a) =>
a
verts

gbkg :: forall b n m. (TrailLike (QDiagram b V2 n m), Monoid m, Semigroup m,
                       TypeableFloat n) =>
        QDiagram b V2 n m
gbkg :: forall b n m.
(TrailLike (QDiagram b V2 n m), Monoid m, Semigroup m,
 TypeableFloat n) =>
QDiagram b V2 n m
gbkg = QDiagram b V2 n m
forall {a}.
(V a ~ V2, Monoid a, HasOrigin a, Juxtaposable a, TrailLike a,
 Alignable a, Transformable a) =>
a
grid
    # lc gray
    # rotateBy (-1/20)
    # clipBy p
    # withEnvelope (p :: Path V2 n)
    # lwG 0.05
  where p :: t
p = N t -> t
forall n t. (InSpace V2 n t, TrailLike t) => n -> t
square N t
5

g :: QDiagram b V2 n Any
g = (String -> QDiagram b V2 n Any
forall n b.
(TypeableFloat n, Renderable (Text n) b) =>
String -> QDiagram b V2 n Any
text String
"G" QDiagram b V2 n Any
-> (QDiagram b V2 n Any -> QDiagram b V2 n Any)
-> QDiagram b V2 n Any
forall a b. a -> (a -> b) -> b
# n -> QDiagram b V2 n Any -> QDiagram b V2 n Any
forall a n. (N a ~ n, Typeable n, Num n, HasStyle a) => n -> a -> a
fontSizeG n
4 QDiagram b V2 n Any
-> (QDiagram b V2 n Any -> QDiagram b V2 n Any)
-> QDiagram b V2 n Any
forall a b. a -> (a -> b) -> b
# n -> QDiagram b V2 n Any -> QDiagram b V2 n Any
forall n t.
(InSpace V2 n t, Transformable t, Floating n) =>
n -> t -> t
rotateBy (-n
1n -> n -> n
forall a. Fractional a => a -> a -> a
/n
20)) QDiagram b V2 n Any -> QDiagram b V2 n Any -> QDiagram b V2 n Any
forall a. Semigroup a => a -> a -> a
<> QDiagram b V2 n Any
forall b n m.
(TrailLike (QDiagram b V2 n m), Monoid m, Semigroup m,
 TypeableFloat n) =>
QDiagram b V2 n m
gbkg

------------------------------------------------------------
-- R
------------------------------------------------------------

r :: QDiagram b V2 n Any
r = Turtle n () -> Path V2 n
forall n a. (Floating n, Ord n) => Turtle n a -> Path V2 n
sketchTurtle (n -> Turtle n ()
forall n (m :: * -> *).
(OrderedField n, Monad m) =>
n -> TurtleT n m ()
setHeading n
90 Turtle n () -> Turtle n () -> Turtle n ()
forall a b.
StateT (TurtleState n) Identity a
-> StateT (TurtleState n) Identity b
-> StateT (TurtleState n) Identity b
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> n -> Turtle n ()
forall n (m :: * -> *).
(OrderedField n, Monad m) =>
n -> TurtleT n m ()
forward n
5 Turtle n () -> Turtle n () -> Turtle n ()
forall a b.
StateT (TurtleState n) Identity a
-> StateT (TurtleState n) Identity b
-> StateT (TurtleState n) Identity b
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> n -> Turtle n ()
forall n (m :: * -> *).
(OrderedField n, Monad m) =>
n -> TurtleT n m ()
right n
90
                 Turtle n ()
-> StateT (TurtleState n) Identity [()]
-> StateT (TurtleState n) Identity [()]
forall a b.
StateT (TurtleState n) Identity a
-> StateT (TurtleState n) Identity b
-> StateT (TurtleState n) Identity b
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> Int -> Turtle n () -> StateT (TurtleState n) Identity [()]
forall (m :: * -> *) a. Applicative m => Int -> m a -> m [a]
replicateM Int
5 (n -> Turtle n ()
forall n (m :: * -> *).
(OrderedField n, Monad m) =>
n -> TurtleT n m ()
forward n
0.9 Turtle n () -> Turtle n () -> Turtle n ()
forall a b.
StateT (TurtleState n) Identity a
-> StateT (TurtleState n) Identity b
-> StateT (TurtleState n) Identity b
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> n -> Turtle n ()
forall n (m :: * -> *).
(OrderedField n, Monad m) =>
n -> TurtleT n m ()
right n
36)
                 StateT (TurtleState n) Identity [()] -> Turtle n () -> Turtle n ()
forall a b.
StateT (TurtleState n) Identity a
-> StateT (TurtleState n) Identity b
-> StateT (TurtleState n) Identity b
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> n -> Turtle n ()
forall n (m :: * -> *).
(OrderedField n, Monad m) =>
n -> TurtleT n m ()
forward n
0.9 Turtle n () -> Turtle n () -> Turtle n ()
forall a b.
StateT (TurtleState n) Identity a
-> StateT (TurtleState n) Identity b
-> StateT (TurtleState n) Identity b
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> n -> Turtle n ()
forall n (m :: * -> *).
(OrderedField n, Monad m) =>
n -> TurtleT n m ()
left n
135 Turtle n () -> Turtle n () -> Turtle n ()
forall a b.
StateT (TurtleState n) Identity a
-> StateT (TurtleState n) Identity b
-> StateT (TurtleState n) Identity b
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> n -> Turtle n ()
forall n (m :: * -> *).
(OrderedField n, Monad m) =>
n -> TurtleT n m ()
forward n
3
                 )
  # reversePath
  # stroke' (with & vertexNames .~ [["end"]] )
  # lwG 0.3
  # lineJoin LineJoinRound
  # lineCap LineCapRound
  # lc orange
  # (withName "end" $ atop . place turtle . location)
  where
    turtle :: b
turtle = N b -> b
forall n t. (InSpace V2 n t, TrailLike t) => n -> t
eqTriangle N b
1 b -> (b -> b) -> b
forall a b. a -> (a -> b) -> b
# N b -> b -> b
forall (v :: * -> *) n t.
(InSpace v n t, R2 v, Fractional n, Transformable t) =>
n -> t -> t
scaleY N b
1.3 b -> (b -> b) -> b
forall a b. a -> (a -> b) -> b
# Angle (N b) -> b -> b
forall n t.
(InSpace V2 n t, Transformable t, Floating n) =>
Angle n -> t -> t
rotate (-N b
135 N b -> AReview (Angle (N b)) (N b) -> Angle (N b)
forall b a. b -> AReview a b -> a
@@ AReview (Angle (N b)) (N b)
forall n. Floating n => Iso' (Angle n) n
Iso' (Angle (N b)) (N b)
deg)
             # lwG 0.1

------------------------------------------------------------
-- A
------------------------------------------------------------

aTree :: BTree ()
aTree = () -> BTree () -> BTree () -> BTree ()
forall a. a -> BTree a -> BTree a -> BTree a
BNode () BTree ()
f BTree ()
f
  where f :: BTree ()
f = () -> BTree () -> BTree () -> BTree ()
forall a. a -> BTree a -> BTree a -> BTree a
BNode () (() -> BTree ()
forall a. a -> BTree a
leaf ()) (() -> BTree ()
forall a. a -> BTree a
leaf ())

a2 :: QDiagram b V2 n m
a2 = (() -> QDiagram b V2 n m)
-> (P2 n -> P2 n -> QDiagram b V2 n m)
-> Tree ((), P2 n)
-> QDiagram b V2 n m
forall m n a b.
(Monoid' m, Floating n, Ord n) =>
(a -> QDiagram b V2 n m)
-> (P2 n -> P2 n -> QDiagram b V2 n m)
-> Tree (a, P2 n)
-> QDiagram b V2 n m
renderTree (\()
_ -> n -> QDiagram b V2 n m
forall t n.
(TrailLike t, V t ~ V2, N t ~ n, Transformable t) =>
n -> t
circle n
0.5 QDiagram b V2 n m
-> (QDiagram b V2 n m -> QDiagram b V2 n m) -> QDiagram b V2 n m
forall a b. a -> (a -> b) -> b
# Colour Double -> QDiagram b V2 n m -> QDiagram b V2 n m
forall n a.
(InSpace V2 n a, Floating n, Typeable n, HasStyle a) =>
Colour Double -> a -> a
fc Colour Double
forall a. (Ord a, Floating a) => Colour a
purple) P2 n -> P2 n -> QDiagram b V2 n m
forall t (v :: * -> *) n.
(V t ~ v, N t ~ n, TrailLike t) =>
Point v n -> Point v n -> t
(~~) Tree ((), P2 n)
forall {n}. (Floating n, Ord n) => Tree ((), P2 n)
t'' QDiagram b V2 n m
-> (QDiagram b V2 n m -> QDiagram b V2 n m) -> QDiagram b V2 n m
forall a b. a -> (a -> b) -> b
# n -> QDiagram b V2 n m -> QDiagram b V2 n m
forall a n. (N a ~ n, HasStyle a, Typeable n, Num n) => n -> a -> a
lwG n
0.1
  where Just Tree ((), P2 n)
t' = n -> n -> BTree () -> Maybe (Tree ((), P2 n))
forall n a. Num n => n -> n -> BTree a -> Maybe (Tree (a, P2 n))
uniqueXLayout n
1 n
2 BTree ()
aTree
        t'' :: Tree ((), P2 n)
t''     = Tree ((), P2 n) -> Tree ((), P2 n)
forall n a. (Floating n, Ord n) => Tree (a, P2 n) -> Tree (a, P2 n)
forceLayoutTree Tree ((), P2 n)
forall {n}. Num n => Tree ((), P2 n)
t'

------------------------------------------------------------
-- M
------------------------------------------------------------

m :: QDiagram b V2 n Any
m = n -> QDiagram b V2 n Any
forall n t. (InSpace V2 n t, TrailLike t) => n -> t
square n
5 QDiagram b V2 n Any
-> (QDiagram b V2 n Any -> QDiagram b V2 n Any)
-> QDiagram b V2 n Any
forall a b. a -> (a -> b) -> b
# n -> QDiagram b V2 n Any -> QDiagram b V2 n Any
forall a n. (N a ~ n, HasStyle a, Typeable n, Num n) => n -> a -> a
lwG n
0.05 QDiagram b V2 n Any -> QDiagram b V2 n Any -> QDiagram b V2 n Any
forall a. Semigroup a => a -> a -> a
<>
    String -> QDiagram b V2 n Any
forall n b.
(TypeableFloat n, Renderable (Text n) b) =>
String -> QDiagram b V2 n Any
text String
"m"
      # fontSizeG 6 # italic # font "freeserif" # fc green

------------------------------------------------------------
-- S
------------------------------------------------------------

ps :: [P2 n]
ps = ((n, n) -> P2 n) -> [(n, n)] -> [P2 n]
forall a b. (a -> b) -> [a] -> [b]
map (n, n) -> P2 n
forall n. (n, n) -> P2 n
p2 [(n
5,n
5), (n
3,n
6), (n
1,n
5), (n
1,n
4), (n
3,n
3), (n
5,n
2), (n
4,n
0), (n
0,n
0.5)]
s :: b
s = ([b] -> b
forall a. Monoid a => [a] -> a
mconcat ((Point V2 (N b) -> b) -> [Point V2 (N b)] -> [b]
forall a b. (a -> b) -> [a] -> [b]
map (b -> Point V2 (N b) -> b
forall (v :: * -> *) n t.
(InSpace v n t, HasOrigin t) =>
t -> Point v n -> t
place (Colour Double -> b
forall {b}.
(V b ~ V2, Transformable b, TrailLike b, Typeable (N b),
 HasStyle b) =>
Colour Double -> b
disk Colour Double
forall a. (Ord a, Floating a) => Colour a
blue)) [Point V2 (N b)]
forall {n}. Fractional n => [P2 n]
ps) b -> b -> b
forall a. Semigroup a => a -> a -> a
<>
    Bool -> [Point V2 (N b)] -> b
forall t (v :: * -> *) n.
(V t ~ v, N t ~ n, TrailLike t, Fractional (v n)) =>
Bool -> [Point v n] -> t
cubicSpline Bool
False [Point V2 (N b)]
forall {n}. Fractional n => [P2 n]
ps b -> (b -> b) -> b
forall a b. a -> (a -> b) -> b
# N b -> b -> b
forall a n. (N a ~ n, HasStyle a, Typeable n, Num n) => n -> a -> a
lwG N b
0.20)
    # scale 0.8

disk :: Colour Double -> b
disk Colour Double
c = N b -> b
forall t n.
(TrailLike t, V t ~ V2, N t ~ n, Transformable t) =>
n -> t
circle N b
0.4 b -> (b -> b) -> b
forall a b. a -> (a -> b) -> b
# Colour Double -> b -> b
forall n a.
(InSpace V2 n a, Floating n, Typeable n, HasStyle a) =>
Colour Double -> a -> a
fc Colour Double
c b -> (b -> b) -> b
forall a b. a -> (a -> b) -> b
# N b -> b -> b
forall a n. (N a ~ n, HasStyle a, Typeable n, Num n) => n -> a -> a
lwG N b
0

------------------------------------------------------------
-- Logo
------------------------------------------------------------

 = (CatOpts n -> [QDiagram b V2 n Any] -> QDiagram b V2 n Any
forall n a.
(InSpace V2 n a, Floating n, Juxtaposable a, HasOrigin a,
 Monoid' a) =>
CatOpts n -> [a] -> a
hcat' (CatOpts n
forall d. Default d => d
with CatOpts n -> (CatOpts n -> CatOpts n) -> CatOpts n
forall a b. a -> (a -> b) -> b
& (n -> Identity n) -> CatOpts n -> Identity (CatOpts n)
forall n (f :: * -> *).
Functor f =>
(n -> f n) -> CatOpts n -> f (CatOpts n)
sep ((n -> Identity n) -> CatOpts n -> Identity (CatOpts n))
-> n -> CatOpts n -> CatOpts n
forall s t a b. ASetter s t a b -> b -> s -> t
.~ n
0.5) ([QDiagram b V2 n Any] -> QDiagram b V2 n Any)
-> ([QDiagram b V2 n Any] -> [QDiagram b V2 n Any])
-> [QDiagram b V2 n Any]
-> QDiagram b V2 n Any
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (QDiagram b V2 n Any -> QDiagram b V2 n Any)
-> [QDiagram b V2 n Any] -> [QDiagram b V2 n Any]
forall a b. (a -> b) -> [a] -> [b]
map QDiagram b V2 n Any -> QDiagram b V2 n Any
forall n a.
(InSpace V2 n a, Fractional n, Alignable a, HasOrigin a) =>
a -> a
alignB ([QDiagram b V2 n Any] -> QDiagram b V2 n Any)
-> [QDiagram b V2 n Any] -> QDiagram b V2 n Any
forall a b. (a -> b) -> a -> b
$ [ QDiagram b V2 n Any
forall {n} {b}.
(Renderable (Path V2 n) b, RealFloat n, Typeable n) =>
QDiagram b V2 n Any
d, QDiagram b V2 n Any
forall {m} {n} {b}.
(Monoid m, TrailLike (QDiagram b V2 n m), RealFloat n,
 Typeable n) =>
QDiagram b V2 n m
i, QDiagram b V2 n Any
forall {b}.
(V b ~ V2, HasOrigin b, Alignable b, TrailLike b, Juxtaposable b,
 Semigroup b, Typeable (N b), HasStyle b, Transformable b) =>
b
a1, QDiagram b V2 n Any
forall {n} {b}.
(Typeable n, RealFloat n, Renderable (Path V2 n) b,
 Renderable (Text n) b) =>
QDiagram b V2 n Any
g, QDiagram b V2 n Any
forall {n} {b}.
(Typeable n, RealFloat n, Renderable (Path V2 n) b) =>
QDiagram b V2 n Any
r, QDiagram b V2 n Any
forall {m} {n} {b}.
(Monoid m, Floating n, Ord n, TrailLike (QDiagram b V2 n m),
 Typeable n) =>
QDiagram b V2 n m
a2, QDiagram b V2 n Any
forall {n} {b}.
(Typeable n, RealFloat n, Renderable (Path V2 n) b,
 Renderable (Text n) b) =>
QDiagram b V2 n Any
m, QDiagram b V2 n Any
forall {b}.
(V b ~ V2, Monoid b, HasOrigin b, Transformable b, TrailLike b,
 Typeable (N b), HasStyle b) =>
b
s ])
       # centerXY