yesod/Yesod/Form/Class.hs
2011-05-09 22:07:56 +03:00

76 lines
2.6 KiB
Haskell

{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE TypeSynonymInstances #-}
module Yesod.Form.Class
( ToForm (..)
, ToField (..)
) where
import Text.Hamlet
import Yesod.Widget (GGWidget)
import Yesod.Form.Fields
import Yesod.Form.Types
import Yesod.Form.Functions (areq, aopt)
import Data.Int (Int64)
import Data.Time (Day, TimeOfDay)
import Data.Text (Text)
import Yesod.Handler (GGHandler)
class ToForm a master monad where
toForm :: AForm ([FieldView (GGWidget master monad ())] -> [FieldView (GGWidget master monad ())]) monad a
class ToField a master monad where
toField :: FieldSettings -> Maybe a -> AForm ([FieldView (GGWidget master monad ())] -> [FieldView (GGWidget master monad ())]) monad a
{- FIXME
instance ToFormField String y where
toFormField = stringField
instance ToFormField (Maybe String) y where
toFormField = maybeStringField
-}
instance Monad m => ToField Text master (GGHandler sub master m) where
toField = areq textField
instance Monad m => ToField (Maybe Text) master (GGHandler sub master m) where
toField = aopt textField
instance Monad m => ToField Int master (GGHandler sub master m) where
toField = areq intField
instance Monad m => ToField (Maybe Int) master (GGHandler sub master m) where
toField = aopt intField
instance Monad m => ToField Int64 master (GGHandler sub master m) where
toField = areq intField
instance Monad m => ToField (Maybe Int64) master (GGHandler sub master m) where
toField = aopt intField
instance Monad m => ToField Double master (GGHandler sub master m) where
toField = areq doubleField
instance Monad m => ToField (Maybe Double) master (GGHandler sub master m) where
toField = aopt doubleField
instance Monad m => ToField Day master (GGHandler sub master m) where
toField = areq dayField
instance Monad m => ToField (Maybe Day) master (GGHandler sub master m) where
toField = aopt dayField
instance Monad m => ToField TimeOfDay master (GGHandler sub master m) where
toField = areq timeField
instance Monad m => ToField (Maybe TimeOfDay) master (GGHandler sub master m) where
toField = aopt timeField
instance Monad m => ToField Html master (GGHandler sub master m) where
toField = areq htmlField
instance Monad m => ToField (Maybe Html) master (GGHandler sub master m) where
toField = aopt htmlField
instance Monad m => ToField Textarea master (GGHandler sub master m) where
toField = areq textareaField
instance Monad m => ToField (Maybe Textarea) master (GGHandler sub master m) where
toField = aopt textareaField
{- FIXME
instance ToFormField Bool y where
toFormField = boolField
-}