Safe Haskell | None |
---|---|
Language | Haskell2010 |
Some basic lenses for the Messages API. These are compatible with both lens and lens-family.
This package doesn't provide any lens combinators like ^.
or ^..
, so you'll need to use
ones from a lens package.
For example, the following code gets the values of the speed
fields
from all of the record
messages in the file:
Right fit <- readFileMessages "file.fit" let speeds = fit ^.. message 20 . field 6 . int
- messages :: Applicative f => (Message -> f Message) -> Messages -> f Messages
- message :: (Contravariant f, Applicative f) => Int -> (Message -> f Message) -> Messages -> f Messages
- messageNumber :: Functor f => (Int -> f Int) -> Message -> f Message
- fields :: Applicative f => (Field -> f Field) -> Message -> f Message
- field :: (Contravariant f, Applicative f) => Int -> (Field -> f Field) -> Message -> f Message
- fieldNumber :: Functor f => (Int -> f Int) -> Field -> f Field
- fieldValue :: Functor f => (Value -> f Value) -> Field -> f Field
- int :: Applicative f => (Int -> f Int) -> Field -> f Field
- real :: Applicative f => (Double -> f Double) -> Field -> f Field
- text :: Applicative f => (Text -> f Text) -> Field -> f Field
- byte :: Applicative f => (Word8 -> f Word8) -> Field -> f Field
- ints :: Applicative f => (Seq Int -> f (Seq Int)) -> Field -> f Field
- reals :: Applicative f => (Seq Double -> f (Seq Double)) -> Field -> f Field
- bytestring :: Applicative f => (ByteString -> f ByteString) -> Field -> f Field
Messages
messages :: Applicative f => (Message -> f Message) -> Messages -> f Messages Source
Traverse all the messages in a Messages
messages :: Traversal' Messages Message
message :: (Contravariant f, Applicative f) => Int -> (Message -> f Message) -> Messages -> f Messages Source
A Fold over the messages with the given message number
message :: Int -> Fold Messages Message
messageNumber :: Functor f => (Int -> f Int) -> Message -> f Message Source
Lens on the message number from a Message
messageNumber :: Lens' Message Int
Fields
fields :: Applicative f => (Field -> f Field) -> Message -> f Message Source
Traverse all the fields in a Message
fields :: Traversal' Message Field
field :: (Contravariant f, Applicative f) => Int -> (Field -> f Field) -> Message -> f Message Source
A Fold over the fields in a Message
with the given field number
field :: Int -> Fold Message Field
fieldNumber :: Functor f => (Int -> f Int) -> Field -> f Field Source
Lens on the field number from a Field
fieldNumber :: Lens Field Int
fieldValue :: Functor f => (Value -> f Value) -> Field -> f Field Source
Lens on the Value
from a Field
fieldValue :: Lens Field Value
Values
Generally when you're looking up the value for a particular field you'll know
the expected type ahead of time. If you know the field you're looking at holds
integers, then you can use int
to directly get an Int
instead of a
Singleton (IntValue x)
.
These traversals are not prisms, because to reconstruct the Field
we need
the field number in addition to the wrapped value.
int :: Applicative f => (Int -> f Int) -> Field -> f Field Source
Traverse the Singleton
and IntValue
constructors for a field value
int :: Traversal' Field Int
real :: Applicative f => (Double -> f Double) -> Field -> f Field Source
Traverse the Singleton
and RealValue
constructors for a field value
real :: Traversal' Field Double
text :: Applicative f => (Text -> f Text) -> Field -> f Field Source
Traverse the Singleton
and TextValue
constructors for a field value
text :: Traversal' Field Text
byte :: Applicative f => (Word8 -> f Word8) -> Field -> f Field Source
Traverse the Singleton
and ByteValue
constructors for a field value
byte :: Traversal' Field Word8
ints :: Applicative f => (Seq Int -> f (Seq Int)) -> Field -> f Field Source
Traverse the Array
and IntArray
constructors for a field value
ints :: Traversal' Field (Seq Int)
reals :: Applicative f => (Seq Double -> f (Seq Double)) -> Field -> f Field Source
Traverse the Array
and RealArray
constructors for a field value
reals :: Traversal' Field (Seq Double)
bytestring :: Applicative f => (ByteString -> f ByteString) -> Field -> f Field Source
Travese the Array
and ByteArray
constructors for a field value
bytestring :: Traversal' Field ByteString