[Haskell-beginners] phantom type

PICCA Frederic-Emmanuel frederic-emmanuel.picca at synchrotron-soleil.fr
Sat Mar 31 07:54:50 UTC 2018


Hello,

Here my problem.
I extract some information from a database and put them into a type with 50 parameters

Type MyData = MyData Int String ...

But I need to be able to differenciate two different case. depending on the String content.
something like if the String start with "ref-" it is a Caracterization and if not it is a Collect

So I end up with this solution

data Unchecked
data Caracterization
data Collect

data MyData t = MyData Int String ...

now I defined a function

getMyDataFromDatabase :: ... -> Mydata Unchecked

and isCollect in order to verify that I have a Collect and not something Else

isACollect :: MyData Unchecked -> Either Text (MyData Collect).

which use coerc in order to avoid copying all the members. It is great.

now Here is my problem.

I create a method

myMethod :: MyData Collect -> IO ()

but I want my method to work for MyData Collect and Mydata Caracterization but not Unchecked.

So It seems to me that I can not just do

myMethod :: MyData t -> IO ()


what is the right way to solve this problem ?


thanks for your help.


Frederic


More information about the Beginners mailing list