[Haskell-cafe] Type checking string literal in Haskell?

John Lato jwlato at gmail.com
Mon Mar 3 03:59:30 UTC 2014


Yes.  In Haskell, types are your friends.  You should define new types
liberally.

I think the usual approach is to create newtype wrapper:

> module EmailAddr (EmailAddr, mkEmailAddr) where
>
> newtype EmailAddr = EmailAddr String
>
> mkEmailAddr :: String -> Maybe EmailAddr
> mkEmailAddr str = if isEmailAddr then Just (EmailAddr str) else Nothing

The only way to make an EmailAddr is via the mkEmailAddr function, which
checks that the string is actually a valid address (implementation
omitted).  Therefore, there's a guarantee that any EmailAddr is actually a
well-formed email address, and any functions that operate on an EmailAddr
can rely upon this.

Of course, it might be useful to create an actual algebraic type instead:

> data EmailAddr = EmailAddr { address :: String, domain :: String }

(and the domain could similarly be an algebraic type instead of a plain
string)

In general, you should be working with types that closely reflect the
domain you're working in.  This will make your functions more clear, and
the compiler/type checker will be able to provide more help during
development.

John L.


On Sat, Mar 1, 2014 at 4:35 AM, KwangYul Seo <kwangyul.seo at gmail.com> wrote:

> In Java, the Checker Framework (
> http://types.cs.washington.edu/checker-framework/) provides a way to type
> check string literals. For example, Java signatures type system
> differentiates strings literals in different forms:
>
> 1. Unqualified strings :
> "Hello, world!" -> @Unqualified String
>
> 2. Fully qualified names:
> "package.Outer.Inner" -> @FullyQualifiedString String
>
> 3. Binary names:
> "package.Outer$Inner" -> @BinaryName String
>
> 4. Field descriptors:
> "Lpackage/Outer$Inner;" -> @FieldDescriptor String
>
> It can do the similar checks with regular expressions or SQL statements.
>
> Is it possible to type check string literals in Haskell? I think it would
> be nice if we can check if a given string literal is a valid URL or an
> email address at compile time.
>
> Regards,
> Kwang Yul Seo
>
>
> _______________________________________________
> Haskell-Cafe mailing list
> Haskell-Cafe at haskell.org
> http://www.haskell.org/mailman/listinfo/haskell-cafe
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.haskell.org/pipermail/haskell-cafe/attachments/20140302/a52bd95c/attachment.html>


More information about the Haskell-Cafe mailing list