| Safe Haskell | None |
|---|---|
| Language | Haskell2010 |
DataFrame.Typed.Expr
Description
Type-safe expression construction for typed DataFrames.
Unlike the untyped Expr a where column references are unchecked strings,
TExpr ensures at compile time that:
- Referenced columns exist in the schema
- Column types match the expression type
Example
type Schema = '[Column "age" Int, Column "salary" Double] -- This compiles: goodExpr :: TExpr Schema Double goodExpr = col @"salary" -- This gives a compile-time error (column not found): badExpr :: TExpr Schema Double badExpr = col @"nonexistent" -- This gives a compile-time error (type mismatch): wrongType :: TExpr Schema Int wrongType = col @"salary" -- salary is Double, not Int
Synopsis
- newtype TExpr (cols :: [Type]) a = TExpr {}
- col :: forall (name :: Symbol) (cols :: [Type]) a. (KnownSymbol name, a ~ Lookup name cols, Columnable a, AssertPresent name cols) => TExpr cols a
- lit :: forall a (cols :: [Type]). Columnable a => a -> TExpr cols a
- ifThenElse :: forall a (cols :: [Type]). Columnable a => TExpr cols Bool -> TExpr cols a -> TExpr cols a -> TExpr cols a
- lift :: forall a b (cols :: [Type]). (Columnable a, Columnable b) => (a -> b) -> TExpr cols a -> TExpr cols b
- lift2 :: forall a b c (cols :: [Type]). (Columnable a, Columnable b, Columnable c) => (a -> b -> c) -> TExpr cols a -> TExpr cols b -> TExpr cols c
- (.==.) :: forall a (cols :: [Type]). (Columnable a, Eq a) => TExpr cols a -> TExpr cols a -> TExpr cols Bool
- (./=.) :: forall a (cols :: [Type]). (Columnable a, Eq a) => TExpr cols a -> TExpr cols a -> TExpr cols Bool
- (.<.) :: forall a (cols :: [Type]). (Columnable a, Ord a) => TExpr cols a -> TExpr cols a -> TExpr cols Bool
- (.<=.) :: forall a (cols :: [Type]). (Columnable a, Ord a) => TExpr cols a -> TExpr cols a -> TExpr cols Bool
- (.>=.) :: forall a (cols :: [Type]). (Columnable a, Ord a) => TExpr cols a -> TExpr cols a -> TExpr cols Bool
- (.>.) :: forall a (cols :: [Type]). (Columnable a, Ord a) => TExpr cols a -> TExpr cols a -> TExpr cols Bool
- (.&&.) :: forall (cols :: [Type]). TExpr cols Bool -> TExpr cols Bool -> TExpr cols Bool
- (.||.) :: forall (cols :: [Type]). TExpr cols Bool -> TExpr cols Bool -> TExpr cols Bool
- not :: forall (cols :: [Type]). TExpr cols Bool -> TExpr cols Bool
- sum :: forall a (cols :: [Type]). (Columnable a, Num a) => TExpr cols a -> TExpr cols a
- mean :: forall a (cols :: [Type]). (Columnable a, Real a) => TExpr cols a -> TExpr cols Double
- count :: forall a (cols :: [Type]). Columnable a => TExpr cols a -> TExpr cols Int
- minimum :: forall a (cols :: [Type]). (Columnable a, Ord a) => TExpr cols a -> TExpr cols a
- maximum :: forall a (cols :: [Type]). (Columnable a, Ord a) => TExpr cols a -> TExpr cols a
- collect :: forall a (cols :: [Type]). Columnable a => TExpr cols a -> TExpr cols [a]
- as :: forall a (cols :: [Type]). Columnable a => TExpr cols a -> Text -> NamedExpr
- asc :: forall a (cols :: [Type]). Columnable a => TExpr cols a -> TSortOrder cols
- desc :: forall a (cols :: [Type]). Columnable a => TExpr cols a -> TSortOrder cols
Core typed expression type (re-exported from Types)
newtype TExpr (cols :: [Type]) a Source #
A typed expression validated against schema cols, producing values of type a.
Unlike the untyped 'Expr a', a TExpr can only be constructed through
type-safe combinators (col, lit, arithmetic operations) that verify
column references exist in the schema with the correct type.
Use unTExpr to extract the underlying Expr for delegation to the untyped API.
Instances
| (IsString a, Columnable a) => IsString (TExpr cols a) Source # | |
Defined in DataFrame.Typed.Expr Methods fromString :: String -> TExpr cols a # | |
| (Floating a, Columnable a) => Floating (TExpr cols a) Source # | |
Defined in DataFrame.Typed.Expr Methods exp :: TExpr cols a -> TExpr cols a # log :: TExpr cols a -> TExpr cols a # sqrt :: TExpr cols a -> TExpr cols a # (**) :: TExpr cols a -> TExpr cols a -> TExpr cols a # logBase :: TExpr cols a -> TExpr cols a -> TExpr cols a # sin :: TExpr cols a -> TExpr cols a # cos :: TExpr cols a -> TExpr cols a # tan :: TExpr cols a -> TExpr cols a # asin :: TExpr cols a -> TExpr cols a # acos :: TExpr cols a -> TExpr cols a # atan :: TExpr cols a -> TExpr cols a # sinh :: TExpr cols a -> TExpr cols a # cosh :: TExpr cols a -> TExpr cols a # tanh :: TExpr cols a -> TExpr cols a # asinh :: TExpr cols a -> TExpr cols a # acosh :: TExpr cols a -> TExpr cols a # atanh :: TExpr cols a -> TExpr cols a # log1p :: TExpr cols a -> TExpr cols a # expm1 :: TExpr cols a -> TExpr cols a # | |
| (Num a, Columnable a) => Num (TExpr cols a) Source # | |
Defined in DataFrame.Typed.Expr Methods (+) :: TExpr cols a -> TExpr cols a -> TExpr cols a # (-) :: TExpr cols a -> TExpr cols a -> TExpr cols a # (*) :: TExpr cols a -> TExpr cols a -> TExpr cols a # negate :: TExpr cols a -> TExpr cols a # abs :: TExpr cols a -> TExpr cols a # signum :: TExpr cols a -> TExpr cols a # fromInteger :: Integer -> TExpr cols a # | |
| (Fractional a, Columnable a) => Fractional (TExpr cols a) Source # | |
Column reference (schema-checked)
col :: forall (name :: Symbol) (cols :: [Type]) a. (KnownSymbol name, a ~ Lookup name cols, Columnable a, AssertPresent name cols) => TExpr cols a Source #
Create a typed column reference. This is the key type-safety entry point.
The column name must exist in cols and its type must match a.
Both checks happen at compile time via type families.
salary :: TExpr '[Column "salary" Double] Double salary = col @"salary"
Literals
lit :: forall a (cols :: [Type]). Columnable a => a -> TExpr cols a Source #
Create a literal expression. Valid for any schema since it references no columns.
Conditional
ifThenElse :: forall a (cols :: [Type]). Columnable a => TExpr cols Bool -> TExpr cols a -> TExpr cols a -> TExpr cols a Source #
Conditional expression.
Unary / binary lifting
lift :: forall a b (cols :: [Type]). (Columnable a, Columnable b) => (a -> b) -> TExpr cols a -> TExpr cols b Source #
Lift a unary function into a typed expression.
lift2 :: forall a b c (cols :: [Type]). (Columnable a, Columnable b, Columnable c) => (a -> b -> c) -> TExpr cols a -> TExpr cols b -> TExpr cols c Source #
Lift a binary function into typed expressions.
Comparison operators
(.==.) :: forall a (cols :: [Type]). (Columnable a, Eq a) => TExpr cols a -> TExpr cols a -> TExpr cols Bool infixl 4 Source #
(./=.) :: forall a (cols :: [Type]). (Columnable a, Eq a) => TExpr cols a -> TExpr cols a -> TExpr cols Bool infixl 4 Source #
(.<.) :: forall a (cols :: [Type]). (Columnable a, Ord a) => TExpr cols a -> TExpr cols a -> TExpr cols Bool infixl 4 Source #
(.<=.) :: forall a (cols :: [Type]). (Columnable a, Ord a) => TExpr cols a -> TExpr cols a -> TExpr cols Bool infixl 4 Source #
(.>=.) :: forall a (cols :: [Type]). (Columnable a, Ord a) => TExpr cols a -> TExpr cols a -> TExpr cols Bool infixl 4 Source #
(.>.) :: forall a (cols :: [Type]). (Columnable a, Ord a) => TExpr cols a -> TExpr cols a -> TExpr cols Bool infixl 4 Source #
Logical operators
(.&&.) :: forall (cols :: [Type]). TExpr cols Bool -> TExpr cols Bool -> TExpr cols Bool infixr 3 Source #
(.||.) :: forall (cols :: [Type]). TExpr cols Bool -> TExpr cols Bool -> TExpr cols Bool infixr 2 Source #
Aggregation combinators
mean :: forall a (cols :: [Type]). (Columnable a, Real a) => TExpr cols a -> TExpr cols Double Source #
minimum :: forall a (cols :: [Type]). (Columnable a, Ord a) => TExpr cols a -> TExpr cols a Source #
maximum :: forall a (cols :: [Type]). (Columnable a, Ord a) => TExpr cols a -> TExpr cols a Source #
Named expression helper
as :: forall a (cols :: [Type]). Columnable a => TExpr cols a -> Text -> NamedExpr Source #
Create a NamedExpr for use with aggregateUntyped.
Sort helpers
asc :: forall a (cols :: [Type]). Columnable a => TExpr cols a -> TSortOrder cols Source #
Create an ascending sort order from a typed expression.
desc :: forall a (cols :: [Type]). Columnable a => TExpr cols a -> TSortOrder cols Source #
Create a descending sort order from a typed expression.
Orphan instances
| (IsString a, Columnable a) => IsString (TExpr cols a) Source # | |
Methods fromString :: String -> TExpr cols a # | |
| (Floating a, Columnable a) => Floating (TExpr cols a) Source # | |
Methods exp :: TExpr cols a -> TExpr cols a # log :: TExpr cols a -> TExpr cols a # sqrt :: TExpr cols a -> TExpr cols a # (**) :: TExpr cols a -> TExpr cols a -> TExpr cols a # logBase :: TExpr cols a -> TExpr cols a -> TExpr cols a # sin :: TExpr cols a -> TExpr cols a # cos :: TExpr cols a -> TExpr cols a # tan :: TExpr cols a -> TExpr cols a # asin :: TExpr cols a -> TExpr cols a # acos :: TExpr cols a -> TExpr cols a # atan :: TExpr cols a -> TExpr cols a # sinh :: TExpr cols a -> TExpr cols a # cosh :: TExpr cols a -> TExpr cols a # tanh :: TExpr cols a -> TExpr cols a # asinh :: TExpr cols a -> TExpr cols a # acosh :: TExpr cols a -> TExpr cols a # atanh :: TExpr cols a -> TExpr cols a # log1p :: TExpr cols a -> TExpr cols a # expm1 :: TExpr cols a -> TExpr cols a # | |
| (Num a, Columnable a) => Num (TExpr cols a) Source # | |
Methods (+) :: TExpr cols a -> TExpr cols a -> TExpr cols a # (-) :: TExpr cols a -> TExpr cols a -> TExpr cols a # (*) :: TExpr cols a -> TExpr cols a -> TExpr cols a # negate :: TExpr cols a -> TExpr cols a # abs :: TExpr cols a -> TExpr cols a # signum :: TExpr cols a -> TExpr cols a # fromInteger :: Integer -> TExpr cols a # | |
| (Fractional a, Columnable a) => Fractional (TExpr cols a) Source # | |