Uh oh!
There was an error while loading.Please reload this page.
- Notifications
You must be signed in to change notification settings - Fork149
Description
The problem
Now that we havePlatformColor (nice implementation btw), I think we should think about color not being a type alias to string anymore(part reversal of this PR). I would like to gradually start to use platform colors in my app, now all colors are strings, and sometimes I do some manipulation on them (like darken/lighten), of course that wouldn't work on platform colors.
Considered solution
So to make colors safe I think we should make them phantom typed.
type t<'a>external string: string => t<string> = "%identity"external get: color<'a> => 'a = "%identity"...let blue = Color.string("blue")let blueString = Color.get(blue)With platform colors beingcolor<PlatformColor.t>.
InStyle.t we can accept all colors (we need a lot of type parameters in the external though)
Alternative solution
An opaque type. The type of the color would be lost, so we can't easily have aget ortoString that would raise a type error for a platform color. The upside for this is that we need less type parameters.