, it seems the laws don't work correctly.
for example I changed the
listhead
implementation from this
Copy code
@JvmStatic
public fun <A> listHead(): Optional<List<A>, A> = Optional(
getOption = { if (it.isNotEmpty()) Some(it[0]) else None },
set = { list, newHead -> if (list.isNotEmpty()) newHead prependTo list.drop(1) else emptyList() }
)
to this
Copy code
@JvmStatic
public fun <A> listHead(): Optional<List<A>, A> = Optional(
getOption = { if (it.isNotEmpty()) Some(it[0]) else None },
set = { list, newHead -> list }
)