Copyright | (c) Jun Narumi 2018-2020 |
---|---|
License | BSD3 |
Maintainer | narumij@gmail.com |
Stability | experimental |
Portability | ? |
Safe Haskell | None |
Language | Haskell2010 |
Jones-Faithfull notation parser for spacegroup.
Synopsis
- type ReadNum b = Value -> Either String b
- equivalentPositions :: Num a => ReadNum a -> CharParser () [[a]]
- transformPpABC :: Num a => ReadNum a -> CharParser () [[a]]
- transformQqXYZ :: Num a => ReadNum a -> CharParser () [[a]]
- ratio :: Integral a => ReadNum (Ratio a)
- floating :: Floating a => ReadNum a
- integral :: Integral a => ReadNum a
- sign :: CharParser () Char
- minus :: Num a => Maybe Char -> a -> a
- overlap :: Eq a => [a] -> Bool
- elementBody :: CharParser () Char -> ReadNum a -> CharParser () (Maybe a, Maybe Char)
Documentation
:: Num a | |
=> ReadNum a | ratio or floating or integral |
-> CharParser () [[a]] |
Jones-Faithful notation parser
>>>
parse (equivalentPositions integral) "" "x+1,y+2,z+3"
Right [[1,0,0,1],[0,1,0,2],[0,0,1,3]]
transformPpABC :: Num a => ReadNum a -> CharParser () [[a]] Source #
Same as equivalentPositions but uses abc instead of xyz
>>>
parse (transformPpABC integral) "" "a+1,b+2,c+3"
Right [[1,0,0,1],[0,1,0,2],[0,0,1,3]]
transformQqXYZ :: Num a => ReadNum a -> CharParser () [[a]] Source #
Alias of equivalentPositions
>>>
parse (transformQqXYZ integral) "" "x+1,y+2,z+3"
Right [[1,0,0,1],[0,1,0,2],[0,0,1,3]]
ratio :: Integral a => ReadNum (Ratio a) Source #
Converter of 3 kind of number (int,float,ratio) string to rational
>>>
parse (equivalentPositions ratio) "" "x+1,y+2,z+3"
Right [[1 % 1,0 % 1,0 % 1,1 % 1],[0 % 1,1 % 1,0 % 1,2 % 1],[0 % 1,0 % 1,1 % 1,3 % 1]]
floating :: Floating a => ReadNum a Source #
Converter of 3 kind of number description to floating point
>>>
parse (equivalentPositions floating) "" "x+1,y+2,z+3"
Right [[1.0,0.0,0.0,1.0],[0.0,1.0,0.0,2.0],[0.0,0.0,1.0,3.0]]
integral :: Integral a => ReadNum a Source #
Converter of integral number description to integral
This can not read ratio and floating string (e.g. '1/2', '0.1')
>>>
parse (equivalentPositions integral) "" "x+1,y+2,z+3"
Right [[1,0,0,1],[0,1,0,2],[0,0,1,3]]
sign :: CharParser () Char Source #
elementBody :: CharParser () Char -> ReadNum a -> CharParser () (Maybe a, Maybe Char) Source #