1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
|
{-# LANGUAGE GADTs #-}
{-# LANGUAGE StandaloneDeriving #-}
{-# LANGUAGE UnicodeSyntax #-}
module Hkl.Lattice ( Lattice(..)
, Cubic
, Tetragonal
, Orthorhombic
, Rhombohedral
, Hexagonal
, Monoclinic
, Triclinic
) where
import Numeric.Units.Dimensional.Prelude (Length, Angle)
-- | Lattice
data Cubic
data Tetragonal
data Orthorhombic
data Rhombohedral
data Hexagonal
data Monoclinic
data Triclinic
data Lattice a where
-- ^ a = b = c, alpha = beta = gamma = 90
Cubic ∷ Length Double
→ Lattice Cubic -- ^ a = b = c, alpha = beta = gamma = 90
-- a = b != c, alpha = beta = gamma = 90
Tetragonal ∷ (Length Double) -- ^ a, b
→ (Length Double) -- ^ c
→ Lattice Tetragonal
-- ^ a != b != c, alpha = beta = gamma = 90
Orthorhombic ∷ (Length Double) -- ^ a
→ (Length Double) -- ^ b
→ (Length Double) -- ^ c
→ Lattice Orthorhombic
-- ^ a = b = c, alpha = beta = gamma != 90
Rhombohedral ∷ (Length Double) -- ^ a, b, c
→ (Angle Double) -- ^ alpha, beta, gamma
→ Lattice Rhombohedral
-- ^ a = b != c, alpha = beta = 90, gamma = 120
Hexagonal ∷ (Length Double) -- ^ a, b
→ (Length Double) -- ^ c
→ Lattice Hexagonal
-- a != b != c, alpha = gamma = 90, beta != 90
Monoclinic ∷ (Length Double) -- ^ a
→ (Length Double) -- ^ b
→ (Length Double) -- ^ c
→ (Angle Double) -- ^ beta
→ Lattice Monoclinic
-- a != b != c, alpha != beta != gamma != 90
Triclinic ∷ (Length Double)
→ (Length Double) -- ^ b
→ (Length Double) -- ^ c
→ (Angle Double) -- ^ alpha
→ (Angle Double) -- ^ beta
→ (Angle Double) -- ^ gamma
→ Lattice Triclinic
deriving instance Show (Lattice a)
|