Data type for only lowercase chars

HYB*_*R1D 4 haskell

I'm trying to make a data type in Haskell that will only match lowercase chars, but not uppercase chars. I'm looking for something like this:

data LowerChar = [a..z]
Run Code Online (Sandbox Code Playgroud)

Cac*_*tus 10

由于该间隔中只有26个字符,因此可以使用例如26个值的有限类型来表示类型Data.Finite

{-# LANGUAGE DataKinds #-}
import Data.Finite
import Data.Char

newtype Letter = Letter{ getLetterIndex :: Finite 26 }

toLowerChar :: Letter -> Char
toLowerChar = chr . (+ ord 'a') . fromIntegral . getFinite . getLetterIndex

fromLowerChar :: Char -> Maybe Letter
fromLowerChar = fmap Letter . packFinite . fromIntegral . subtract (ord 'a') . ord
Run Code Online (Sandbox Code Playgroud)

当然,如果需要,您也可以将同一类型解释为大写字母。